一尘不染

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

mysql

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

NO ACTION和RESTRICT会执行相同的操作(防止破坏FK的任何数据库更改),并且该操作是默认操作,因此,如果省略ON DELETE子句,则表示NO
ACTION(或RESTRICT -是相同的操作)。

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

CASCADE删除子行。

SET DEFAULT应该永远不被使用。

这或多或少是正确的吗?


阅读 550

收藏
2020-05-17

共1个答案

一尘不染

是的,这是正确的:

无操作 :[…] InnoDB拒绝父表的删除或更新操作。

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

显然NO ACTIONRESTRICT是同义词。此外,由于每当没有ON DELETE / UPDATE子句时都使用它们,因此这是默认行为。

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

如果未将外部列声明为NOT NULL(或InnoDB将不允许删除或更新),则将其设置为NULL。

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

级联删除(或更新)外部列。

SET DEFAULT :解析器可以识别此操作,但是InnoDB拒绝包含ON DELETE SET DEFAULT或ON UPDATE SET
DEFAULT子句的表定义。

因此,基本上您不能使用该选项。

2020-05-17