在更新和删除时的外键选项中。 每个字段[Restrict,Cascade,Set Null,No Action]有什么作用?
答案 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