什么是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 ACTION
和RESTRICT
是同义词。 此外,由于在没有ON DELETE / UPDATE
子句时使用它们,所以这是默认行为。
SET NULL :删除或更新父表中的行,并将子表中的外键列设置为NULL。 […]
如果外部列没有声明为NOT NULL(或InnoDB不允许删除或更新),则将外部列设置为NULL。
CASCADE :删除或更新父表中的行,并自动删除或更新子表中的匹配行。 […]
级联删除(或更新)外部列。
SET DEFAULT :此操作被parsing器识别,但InnoDB拒绝包含ON DELETE SET DEFAULT或ON UPDATE SET DEFAULT子句的表定义。
所以基本上你不能使用这个选项。