在DELETE CASCADE中,自引用MySQL表的深度超过15级失败

pre*_*rem 4 mysql foreign-keys cascading-deletes self-reference

我有一个自我引用外键的MySQL表.ON DELETE CASCADE在它中工作得非常好,但是我注意到一个奇怪的行为,它对于父实体最多只能工作14个级别.一旦我添加一个15级孩子并尝试删除父级,它就会开始抛出错误

"无法删除或更新父行:外键约束失败"

这是层次结构的图像.

在此输入图像描述

尝试删除Parent将抛出错误.

  • 在删除Child15时,可以删除Parent
  • 在不删除Child15的情况下,如果我尝试删除Child1,则会成功删除它.

此处重现行为的示例模式.在构建架构之前粘贴此行查询,其中id = 1而不是id = 2

DELETE FROM table1 WHERE id = 1;

我知道删除它的可能的解决方法

  • SET FOREIGN_KEY_CHECKS = 0
  • 删除时向下移动

但是我想知道,对于ON CASCADE DELETE,这是一些已知的MySQL限制吗?

我使用的是MySQL服务器版本5.6

VMa*_*Mai 7

这是记录在案的行为:

如果ON UPDATE CASCADE或ON UPDATE SET NULL递归更新它在级联期间先前更新的同一个表,它就像RESTRICT一样.这意味着您不能使用自引用ON UPDATE CASCADE或ON UPDATE SET NULL操作.这是为了防止级联更新导致的无限循环.另一方面,自引用ON DELETE SET NULL是可能的,就像自引用ON DELETE CASCADE一样.级联操作可能不会嵌套超过15级.

来源:InnoDB和FOREIGN KEY约束,参考行动