首页 > 解决方案 > 具有嵌套外键的行上的 DELETE 请求

问题描述

我有一个表 B 引用的表 A,表 C 引用了表 B。

这样:

每个外键都有一个约束 ON_DELETE:CASCADE,但是如果我试图删除表 A,它会拒绝。发生这种情况是因为表 B 中的行具有指向表 A 的外键,而表 C 具有指向表 B 的行。

我相信我可以通过先删除表 B,然后删除表 A 来解决这个问题。但是,有人能解释为什么这个 DELETE 是不可能的吗?当然,它应该能够执行降低外键“层次结构”并按顺序删除所有内容的功能?

谢谢

标签: sqlpostgresql

解决方案


在ON DELETE CASCADE操作中,如果父行被删除,会先删除子行,再删除父行,以保证不留下任何引用作为外键

至于您的问题,由于表 B 指的是表 A 的主键,而表 C 指的是表 B 的主键,因此在删除级联上应该起作用的关系只是父子,而不是超越。


推荐阅读