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

Eth*_*han 65 mysql innodb

我正在尝试解析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 ACTIONRESTRICT是同义的.此外,由于只要没有ON DELETE / UPDATE子句就会使用它们,这是默认行为.

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

外部列设置为NULL,前提是它未声明为NOT NULL(或InnoDB不允许删除或更新).

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

级联删除(或更新)外来列.

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

所以基本上你不能使用那个选项.