1.新建外键代码
alter table stu5 add constraint 编号 foreign key (bh) references stu2 (bh) on delete restrict on update restrict;
说明:
stu2和stu5是两张表,“编号”为字段bh的约束名(是stu5表中的一个属性),bh是stu2表中的主键,而bh并不是stu5的主键,那么则称stu2为主表,stu5为从表。
注意:
1.新建外键,子表外键字段列值必须是父表引用列值的子集【值都不能包含怎么做引用列?】。
2.引用列字段必须是索引或主键或联合主键(索引值或联合主键值可重复,唯一主键不能重复)【不做索引怎么关联?】
2.删除和更新有四种设置方式
(1)cascade:级联,当父表更新、删除,子表所有同值记录会同步更新和删除【修改子表,必须保证修改后B表外键字段的值依然能在A表中找到,否则会报错。】(2)set null:置空,当父表更新、删除的时候,字表会把外键字段变为null,所以这个时候设计表的时候该字段要允许为null,否则会出错
(3)restrict:父表在删除和更新记录的时候,要在子表中检查是否有有关该父表要更新和删除的记录,如果有,则不允许删除个更改
(4)no action:和restrict一样
(5)SET DEFAULT 指定如果试图删除某一行,而该行的键被其他表的现有行中的外键所引用,则组成被引用行中的外键的所有值将被设置为它们的默认值。目标表的所有外键列必须具有默认值定义,此约束才可执行。如果某个列可为空值,并且未设置显式的默认值,则会使用 NULL 作为该列的隐式默认值。因 ON DELETE SET DEFAULT 而设置的任何非空值在主表中必须有对应的值,才能维护外键约束的有效性。
————————————————
版权声明:本文为CSDN博主「瘦不下来的吴彦祖」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/zzy296753977/article/details/80848613
在MySQL中,如果两个表存在主外关系,则有五种引用操作,分别是 cascade、no action、restrict、set null和set default,有很多人对no action的restrict区别搞不清楚,其实在MySQL中是一样的,原因如下:restrict是在修改或者删除之前去检查从表中是否有对应的数据,如果有,拒绝操作,而no action是来源标准的sql,在有些数据库中,会延迟检查,即在修改或者删除完以后去检查从表中是否有对应的数据,如果有,拒绝操作,但是在MySQL中,外键约束都会立即检查,所以两者等价。需要注意的是,set default只是MySQL 解析器认可,但是InnoDB和NDB 拒绝在定义表时,出现ON DELETE SET DEFAULT or ON UPDATE SET DEFAULT 语句。
————————————————
版权声明:本文为CSDN博主「Infen」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/infen/article/details/84009724
————————————————
版权声明:本文为CSDN博主「fullStackChenZF」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/fullStackChenZF/article/details/78031192删除外键命令: alter table 表名 drop foreign key 外键约束名称 //删除外键 alter table stu2 drop foreign key 编号 //实例