Mysql外键约束Cascade、NO ACTION、Restrict、SET NULL的区别

外键在数据库中其实是很常见的,像大家常见到的一对一一对多多对多表关系,这就是“外键+索引”实现的,也可以叫外键约束。个人怎么理解都无所谓?也不用太追究字面上的意思,重要的是你能在实际工作中灵活运用起来就行了。

 

由于PhpMyadmin没有图形界面“外键约束”操作功能,只好用了 Navicat 15 for MySQL,当我添加外键的时候,发现有外键设置的时候,有几个值,如下:

  • Cascade
  • NO ACTION
  • Restrict
  • SET NULL

Mysql外键设置中Cascade、NO ACTION、Restrict、SET NULL

 

每个设置的值肯定是有不同的含义的,下面给大家简单讲解一下:

 

1、 cascade

在父表上update/delete记录时,同步update/delete掉子表的匹配记录。

 

2、No action

如果子表中有匹配的记录,则不允许对父表对应候选键进行update/delete操作。

 

3、Restrict

同no action一样, 都是立即检查外键约束。

 

4、SET NULL

在父表上update/delete记录时,将子表上匹配记录的列设为null。

这里要注意子表的外键列不能为not null。

 

5、Set default

父表有变更时,子表将外键列设置成一个默认的值,但Innodb不能识别。

 

Cascade、NO ACTION、Restrict、SET NULL之间的区别

1、CASCADE:级联

(1)所谓的级联删除,就是删除主键表的同时,外键表同时删除。

(2)我举一个例子:以读大学为例子,这里有2张表:学生表和院系表,假如院系表中的某个院系被删除了,那么在学生表中要想查询这个被删除的院系号所对应的院信息就会报错,因为已经不存在这个系了,所以,删除院系表(主键表)时必须删除其他与之关联的表,这里就说明了外键的作用,保持数据的一致性、完整性。当然反过来讲,你删除学生表中的记录,并不影响院系表中的数据,你查询院系号也能正确查询。所以删除外键表中的数据并不影响主键表。

 

2、NO ACTION(非活动,默认)、RESTRICT:约束/限制

当取值为No Action或者Restrict时,则当在主键表中删除对应记录时,首先检查该记录是否有对应外键,如果有则不允许删除。(即外键表约束主键表)

 

NO ACTION和RESTRICT的区别:只有在及个别的情况下会导致区别,前者是在其他约束的动作之后执行,后者具有最高的优先权执行。

 

3、SET NULL

当取值为Set Null时,则当在主键表中删除对应记录时,首先检查该记录是否有对应外键,如果有则设置子表中该外键值为null,(一样是外键表约束主键表,不过这就要求该外键允许取null)。

    A+
发布日期:2021年04月16日 12:49:41  所属分类:MySQL
最后更新时间:2021-04-16 17:28:51
评分: (1 票;平均数5.00 ;最高评分 5 ;用户总数1;总得分 5;百分比100.00)
付杰
Golang从入门到精通视频教程
  • ¥ 499.0元
  • 市场价:499.0元
Python数据分析与机器学习实战
  • ¥ 398.0元
  • 市场价:498.0元
React.js视频教程:全新React.js16.12技术合集
  • ¥ 69.0元
  • 市场价:69.0元
vue.js视频教程:全新 Vue.js 2.6 核心技术合集
  • ¥ 69.0元
  • 市场价:69.0元

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: