RESTRICT和NO ACTION之间的区别是什么?

时间:2016-09-05 22:43:21

标签: mysql sql foreign-keys

我正在尝试在列上制作FK,现在我正在考虑何时应该使用ON DELETE RESTRICT(或ON UPDATE RESTRICT。是不是与NO ACTION相同?

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

我错过了什么吗?

2 个答案:

答案 0 :(得分:2)

他们是等同的。它甚至在documentation

中就这么说了
  

#define:标准SQL中的关键字。在MySQL中,相当于=--ISNUMBER(match("PM*",B1:J1,0))

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

答案 1 :(得分:2)

当您将约束定义为可延迟最初延迟或最初即时模式时,唯一的区别就在于此。

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

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

请参阅: SQL SET CONTRAINS