我正在尝试解析MySQL 文档.他们可以更清楚.他们似乎在说的是有五种可能性:SET NULL,NO ACTION,RESTRICT,CASCADE和SET DEFAULT.
NO ACTION和RESTRICT做同样的事情(防止任何破坏FK的DB更改)并且那个东西是默认的,所以如果省略ON DELETE子句你就说NO ACTION(或RESTRICT - 同样的事情).
SET NULL允许删除父行,将FK设置为NULL.
CASCADE删除子行.
应该永远不要使用SET DEFAULT.
这或多或少是正确的吗?
Ana*_*nax 80
是的,这是正确的:
NO ACTION:[...] InnoDB拒绝父表的删除或更新操作.
RESTRICT:拒绝父表的删除或更新操作.指定RESTRICT(或NO ACTION)与省略ON DELETE或ON UPDATE子句相同.[...]
显然,NO ACTION与RESTRICT是同义的.此外,由于只要没有ON DELETE / UPDATE子句就会使用它们,这是默认行为.
SET NULL:从父表中删除或更新行,并将子表中的外键列设置为NULL.[...]
外部列设置为NULL,前提是它未声明为NOT NULL(或InnoDB不允许删除或更新).
CASCADE:从父表中删除或更新行,并自动删除或更新子表中的匹配行.[...]
级联删除(或更新)外来列.
SET DEFAULT:解析器识别此操作,但InnoDB拒绝包含ON DELETE SET DEFAULT或ON UPDATE SET DEFAULT子句的表定义.
所以基本上你不能使用那个选项.