SQL-约束
作用于表上字段的规则,用于限制存储在表中的数据
分类
-
约束分类
约束 描述 关键字 非空约束 该字段数据不能为null not null 唯一约束 该字段所有数据唯一,不重复 unique 主键约束 主键为一行数据的唯一标识,非空且唯一 primary key 默认约束 若未指定该字段值,则采用默认值 default 检查约束(版本8.0.16以后) 保证字段满足某一条件 check 外键约束 使两张表的数据建立连接,保证数据一致性和完整性 foreign key
添加外键约束
1 | alter table 表名 add constraint 外键名称 foreign key(外键字段名) references 主表(主表列名); |
- constraint 约束
- references后面的是要关联表的主键
- 关联外键后,父表的主键就不能直接删除,因为子表的外键中有关联的信息
删除外键
1 | alter table 表名 drop foreign key 外键名称; |
外键删除/更新行为
行为 | 说明 |
---|---|
NO ACTION/RESTRICT | 在父表中删除/更新对应记录时,首先检查该记录是否有对应外键,如果有则不允许删除/更新。 |
CASCADE 级联cascade | 当在父表中删除/更新对应记录时,首先检查该记录是否有对应外键,如果有,则也删除/更新外键在子表中的记录。 |
SET NULL | 当在父表中删除对应记录时,首先检查该记录是否有对应外键,如果有则设置子表中该外键值为null (这就要求该外键允许取null)。 |
SET DEFAULT | 父表有变更时,子表将外键列设置成一个默认的值(Innodb不支持) |
例子
1 | alter table 表名 add constraint 外键名称 foreign key (外键字段) references 主表名(主表字段名) on update cascade on delete cascade; |