概念
外键用来让两张表的数据之间建立连接,从而保证数据的一致性和完整性。
具有外键的表称为子表,关联的表称为父表。
语法
添加外键
CREATE TABLE 表名(
字段名 数据类型,
..
[CONSTRAINT] [外键名称] FOREIGN KEY (外键字段名) REFERENCES 主表(主表列名);
ALTER TABLE 表名 ADD CONSTRAINT 外键名称 FOREIGN KEY (外键字段名) REFERENCES 主表 (主表列名);
删除外键
ALTER TABLE 表名 DROP FOREIGN KEY 外键名称;
示例
添加外键
现有两张表user和status,给user添加外键
ALTER TABLE user add constraint fk_user_status foreign key (status) references status(id);
添加成功后,字段名称有一个蓝色的小钥匙,代表已经是外键了,此时对status表中的数据进行删除操作,发现无法删除
删除外键
ALTER TABLE user DROP FOREIGN KEY fk_user_status;
蓝色小钥匙不见了,此时删除成功!
删除更新行为
行为 | 说明 |
---|---|
NO ACTION | 在父表中删除/更新对应记录时,首先检查是否有对应外键,如果有则不能删除/更新 |
RESTRICT | 在父表中删除/更新对应记录时,首先检查是否有对应外键,如果有则不能删除/更新 |
CASCADE | 在父表中删除/更新对应记录时,首先检查是否有对应外键,如果有则删除子表的记录 |
SET NULL | 在父表中删除对应记录时,首先检查是否有对应外键,如果有则设置子表外键值为NULL |
SET DEFAULT | 父表有变更时,子表将外键列设置成一个默认的值 |
通常情况选默认为前面两种
ALTER TABLE 表名 ADD CONSTRAINT 外键名称 FOREIGN KEY (外键字段) REFERENCES 主表名 (主表字段名) ON UPDATE CASCADE ON DELETE CASCADE;
设置了之后,当在status表中修改或删除id,user中的外键也会随之改变或删除
SET NULL同理,这里就不做演示了。