什么是MySQL的默认ON DELETE行为?

时间:2009-06-22 14:51:32

标签: mysql innodb

我正在尝试解析MySQL docs。他们可以更清楚。他们似乎在说的是有五种可能性:SET NULL,NO ACTION,RESTRICT,CASCADE和SET DEFAULT。

NO ACTION和RESTRICT做同样的事情(防止任何DB更改破坏了FK)并且那个东西是默认的,所以如果省略ON DELETE子句你就说NO ACTION(或RESTRICT - 同样的事情)。

SET NULL允许删除父行,将FK设置为​​NULL。

CASCADE删除子行。

SET DEFAULT应该永远不会被使用。

这或多或少是正确的吗?

1 个答案:

答案 0 :(得分:67)

是的,这是正确的:

  

无动作:[...] InnoDB   拒绝删除或更新操作   对于父表。

     

RESTRICT :拒绝删除或更新   父表的操作。   指定RESTRICT(或NO ACTION)是   与省略ON DELETE或   ON UPDATE子句。 [...]

显然NO ACTIONRESTRICT是同义词。此外,由于只要没有ON DELETE / UPDATE子句就会使用它们,这是默认行为。

  

SET NULL :从父表中删除或更新行并设置   外键列中的一列或多列   子表为NULL。 [...]

外部列设置为NULL,前提是它未声明为NOT NULL(或InnoDB不允许删除或更新)。

  

CASCADE :从父表中删除或更新行   自动删除或更新   匹配子表中的行。   [...]

Cascade删除(或更新)外来列。

  

SET DEFAULT :识别此操作   解析器,但InnoDB拒绝   包含ON DELETE的表定义   SET DEFAULT或ON UPDATE SET DEFAULT   条款。

所以基本上你不能使用那个选项。