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

我试图parsingMySQL 文档 。 他们可以更清楚。 他们似乎在说有五种可能性:SET NULL,NO ACTION,RESTRICT,CASCADE和SET DEFAULT。

没有行动和RESTRICT做同样的事情(防止任何数据库改变,打破FK),那东西是默认的,所以如果你省略ON DELETE子句,你说没有行动(或限制 – 同样的事情)。

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

CASCADE删除子行。

应该永远不要使用SET DEFAULT。

这或多或less是正确的?

是的,这是正确的:

NO ACTION :InnoDB拒绝父表的删除或更新操作。

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

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

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

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

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

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

SET DEFAULT :此操作被parsing器识别,但InnoDB拒绝包含ON DELETE SET DEFAULT或ON UPDATE SET DEFAULT子句的表定义。

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