我正在尝试解析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应该永远不被使用。
这或多或少是正确的吗?
是的,这是正确的:
无操作 :[…] InnoDB拒绝父表的删除或更新操作。 RESTRICT :拒绝父表的删除或更新操作。指定RESTRICT(或NO ACTION)与省略ON DELETE或ON UPDATE子句相同。[…]
无操作 :[…] InnoDB拒绝父表的删除或更新操作。
RESTRICT :拒绝父表的删除或更新操作。指定RESTRICT(或NO ACTION)与省略ON DELETE或ON UPDATE子句相同。[…]
显然NO ACTION,RESTRICT是同义词。此外,由于每当没有ON DELETE / UPDATE子句时都使用它们,因此这是默认行为。
NO ACTION
RESTRICT
ON DELETE / UPDATE
SET NULL :从父表中删除或更新该行,并将子表中的一个或多个外键列设置为NULL。[…]
如果未将外部列声明为NOT NULL(或InnoDB将不允许删除或更新),则将其设置为NULL。
CASCADE :从父表中删除或更新行,并自动删除或更新子表中匹配的行。[…]
级联删除(或更新)外部列。
SET DEFAULT :解析器可以识别此操作,但是InnoDB拒绝包含ON DELETE SET DEFAULT或ON UPDATE SET DEFAULT子句的表定义。
因此,基本上您不能使用该选项。