【发布时间】:2010-11-04 21:17:33
【问题描述】:
我正在尝试解析 MySQL docs。他们可以更清楚。他们似乎在说有五种可能性:SET NULL、NO ACTION、RESTRICT、CASCADE 和 SET DEFAULT。
NO ACTION 和 RESTRICT 做同样的事情(防止任何破坏 FK 的 DB 更改)并且该事情是默认设置,因此如果您省略 ON DELETE 子句,您就是在说 NO ACTION(或 RESTRICT——同样的事情)。
SET NULL 允许删除父行,将 FK 设置为 NULL。
CASCADE 删除子行。
SET DEFAULT 永远不应该被使用。
这或多或少是正确的吗?
【问题讨论】:
-
您错过了 CASCADE 选项
-
你理解正确。在 MYSQL 的 FK 约束上不指定引用选项与说 ON DELETE RESTRICT 是一样的
-
只有在 mysql 中,NO ACTION 和 RESTRICT 才具有相同的含义。在另一个我不成立的数据库中,如果在操作结束时没有违反 FK 约束,理论上 NO ACTION 允许删除/更改引用的父级