删除时级联在深度超过15级的自引用MySQL表中失败

删除时级联在深度超过15级的自引用MySQL表中失败,mysql,foreign-keys,cascading-deletes,self-reference,Mysql,Foreign Keys,Cascading Deletes,Self Reference,我有一个带有自引用外键的MySQL表。ON DELETE CASCADE在其中工作得非常好,但我注意到一个奇怪的行为,即对于父实体,它最多只能工作14个级别。一旦我添加了一个15级的子级并尝试删除父级,它就会开始抛出错误 “无法删除或更新父行:外键约束失败” 这是层次结构的图像 尝试删除父项将引发错误 删除子项15时,可以删除父项 在不删除Child15的情况下,如果我尝试删除Child1,那么它将被成功删除 复制行为的示例架构为。在生成架构之前,请使用id=1而不是id=2粘贴此行查询

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

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

这是层次结构的图像

尝试删除父项将引发错误

  • 删除子项15时,可以删除父项
  • 在不删除Child15的情况下,如果我尝试删除Child1,那么它将被成功删除
复制行为的示例架构为。在生成架构之前,请使用id=1而不是id=2粘贴此行查询

从表1中删除,其中id=1

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

  • 设置外键检查=0
  • 删除时自下而上移动
但我想知道,MySQL对于级联删除是否存在一些已知的限制


我正在使用MySQL服务器5.6版

这是有文档记录的行为:

如果在更新级联或更新集上,NULL将递归更新相同的内容 它以前在级联过程中更新过的表 限制这意味着您不能在更新时使用自引用 级联或更新时设置空操作。这是为了防止无限期 由级联更新产生的循环。DELETE上的自引用 另一方面,SET NULL是可能的,就像上的自引用一样 删除级联层叠操作的嵌套不能超过15个 深度层次。

资料来源: