【悄咪咪学MySql】6. 约束

76 阅读2分钟

一. 概述

1. 概念

约束是作用于表中字段上的规则,用于限制存储在表中的数据。

2. 目的

保证数据库中数据的正确、有效性和完整性。

3. 分类

约束描述关键字
非空约束限制该字段不能为 NULLNOT NULL
唯一约束保证该字段的所有数据都是唯一、不重复的UNIQUE
主键约束主键是一行数据的唯一标识,要求非空且唯一PRIMARY KEY
自增约束自动增加序号AUTO_INCREMENT
默认约束保存数据时,如果未指定该字段的值,则采用默认值DEFALUT
检查约束保证字段满足某一个条件 (8.0.16之后)CHECK
外键约束用来让两张表的数据之间建立连接,保证数据的一致性和完整性FOREIGN KEY

二. 外键约束

1. 添加外键

  • 建表时添加
CREATE TABLE 表名(
    字段名 数据类型,
    ...
    [CONSTRAINT] [外键名] FOREIGN KEY(外键字段名) REFERENCES 主表(关联字段名) [ON UPDATE 更新时行为] [ON DELETE 删除时行为]
);
  • 建表后添加
ALTER TABLE 表名 ADD CONSTRAINT 外键名 FOREIGN KEY(外键字段名) REFERENCES 主表(关联字段名) [ON UPDATE 更新时行为] [ON DELETE 删除时行为];

2. 删除外键

ALTER TABLE 表名 DROP FOREIGN KEY 外键名

3. 行为及行为说明

行为说明
NO ACTION 默认当在父表中删除/更新对应记录时,首先检查该记录是否有对应外键,如果有,则不允许删除/更新。(与 RESTRICT 一致)
RESTRICT当在父表中删除/更新对应记录时,首先检查该记录是否有对应外键,如果有,则不允许删除/更新。(与 NO ACTION 一致)
CASCADE当在父表中删除/更新对应记录时,首先检查该记录是否有对应外键,如果有,则也删除/更新外键在子表中的记录(删除主表中关联记录时,对应的子表中的相同外键记录也会被删除)
SET NULL当在父表中删除对应记录时,首先检查该记录是否有对应外键,如果有,则设置子表中该外键值为NULL(这要求该字段没有 NOT NULL 约束)
SET DEFAULT父表有变更时,子表将外键值设置成一个默认值(Innodb不支持)