【发布时间】:2011-08-14 04:12:53
【问题描述】:
RESTRICT 和 NO ACTION 之间的 MySQL FK 有什么区别?从文档来看,它们似乎完全相同。是这样吗?如果有,为什么两者都有?
【问题讨论】:
标签: mysql foreign-keys cascade
RESTRICT 和 NO ACTION 之间的 MySQL FK 有什么区别?从文档来看,它们似乎完全相同。是这样吗?如果有,为什么两者都有?
【问题讨论】:
标签: mysql foreign-keys cascade
来自 MySQL 文档:https://dev.mysql.com/doc/refman/8.0/en/create-table-foreign-keys.html
某些数据库系统已延迟 检查,
NO ACTION是延迟的 查看。在 MySQL 中,外键 立即检查约束, 所以NO ACTION和RESTRICT是一样的。
【讨论】:
符合标准的SQL语法。就像manual 所说:(强调我的)
NO ACTION:标准 SQL 中的关键字。在 MySQL 中,相当于 RESTRICT。如果引用的表中存在相关的外键值,MySQL Server 将拒绝对父表的删除或更新操作。 有些数据库系统有延迟检查,NO ACTION 是延迟检查。在 MySQL 中,会立即检查外键约束,因此 NO ACTION 与 RESTRICT 相同。
【讨论】:
它们在 MySQL 中是相同的。
在 SQL 2003 标准中有 5 种不同的引用操作:
CASCADE
RESTRICT
NO ACTION
SET NULL
SET DEFAULT
NO ACTION 和RESTRICT 的区别在于,根据标准,NO ACTION 是延迟的,而RESTRICT 是立即执行的。
【讨论】: