Mysql workbench外键选项[Restrict,Cascade,Set Null,No Action],它们有什么作用?

时间:2013-04-23 07:21:38

标签: mysql-workbench

在更新和删除时的外键选项中。 每个字段[Restrict,Cascade,Set Null,No Action]有什么作用?

3 个答案:

答案 0 :(得分:38)

如果你逐一采取:

对于更新和删除:

如果您尝试更新/删除父行:

  

限制:如果有子行,则无法删除任何内容

     

级联:子行也将被删除/更新

     

设置为空:如果删除父

,则子列将设置为null      

无操作:子行不会涉及删除/更新

答案 1 :(得分:21)

包含外键的表称为引用子表,包含候选键的表称为引用父表

  

设置NULL :删除父表行时,将列值设置为 NULL

     

CASCADE :当父级更改时,CASCADE将传播更改。如果删除行,引用该行的约束表中的行也将被删除等。

     

RESTRICT :如果存在引用该父行的值的子行,则RESTRICT会导致您无法删除给定的父行

     

没有行动:没有行动和限制是非常相似的。当在引用的表上执行UPDATE或DELETE语句时,DBMS会在语句执行结束时验证没有任何引用关系违反。如果父行删除更新,则无需关注子行。

答案 2 :(得分:0)

当UPDATE或DELETE操作影响子表中具有匹配行的父表中的键值时,结果取决于使用FOREIGN KEY子句的ON UPDATE和ON DELETE子句指定的引用动作。 MySQL支持有关要采取的操作的五个选项,列在此处:

CASCADE::从父表中删除或更新该行,并自动删除或更新子表中的匹配行。同时支持ON DELETE CASCADE和ON UPDATE CASCADE。在两个表之间,不要定义几个作用于父表或子表中同一列上的ON UPDATE CASCADE子句。

设置空值::从父表中删除或更新该行,并将子表中的一个或多个外键列设置为NULL。 支持ON DELETE SET NULL和ON UPDATE SET NULL子句。

如果指定SET NULL操作,请确保未将子表中的列声明为NOT NULL。

限制::拒绝父表的删除或更新操作。指定RESTRICT(或NO ACTION)与省略ON DELETE或ON UPDATE子句相同。

无操作::来自标准SQL的关键字。在MySQL中,等同于RESTRICT。如果引用表中有相关​​的外键值,则MySQL服务器会拒绝父表的删除或更新操作。某些数据库系统具有延迟检查,而“ NO ACTION”是延迟检查。在MySQL中,外键约束会立即检查,因此NO ACTION与RESTRICT相同。

SET DEFAULT::MySQL解析器可以识别此操作,但是InnoDB拒绝包含ON DELETE SET DEFAULT或ON UPDATE SET DEFAULT子句的表定义。

对于未指定的ON DELETE或ON UPDATE,默认操作始终为RESTRICT。

复制自以下文本: https://dev.mysql.com/doc/refman/5.5/en/create-table-foreign-keys.html