MySQL 中 RESTRICT 和 NO ACTION 有什么区别?

问题描述 投票:0回答:2

我正在尝试在列上进行 FK,现在我在想什么时候应该使用

ON DELETE RESTRICT
(或
ON UPDATE RESTRICT
。是不是和
NO ACTION
一样?

ON DELETE RESTRICT
意味着如果存在引用该父行值的子行,则无法删除给定的父行。如果父行没有引用子行,则可以删除该父行。无论如何,它的定义是外键的默认行为。

我错过了什么吗?

mysql sql foreign-keys
2个回答
12
投票

它们是等价的。它甚至在文档中这么说:

NO ACTION
:标准 SQL 中的关键字。在 MySQL 中,相当于
RESTRICT

它们之间存在差异,数据库具有延迟检查,但 MySQL 没有。


7
投票

唯一的区别是,当您将约束定义为 deferrable 并使用 initially deferred 或最初立即模式时。

NO ACTION:在标准 SQL 中,NO ACTION 表示不执行任何操作,即如果引用的表中存在相关外键值,则不允许继续尝试删除或更新主键值。 InnoDB 拒绝对父表进行删除或更新操作。

RESTRICT:拒绝对父表的删除或更新操作。指定 RESTRICT(或 NO ACTION)与省略 ON DELETE 或 ON UPDATE 子句相同。 (有些数据库系统有延迟检查,NO ACTION就是延迟检查。在MySQL中,外键约束是立即检查的,所以NO ACTION和RESTRICT是一样的。)

参见: SQL 设置约束

© www.soinside.com 2019 - 2024. All rights reserved.