带有嵌套外键的行上的DELETE请求

时间:2018-11-12 21:20:54

标签: sql postgresql

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

如此:

  • 表A(pk:id)
  • 表B(pk:id,fk:A_id)
  • 表C(fk:B_id)

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

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

谢谢

1 个答案:

答案 0 :(得分:1)

在ON DELETE CASCADE操作中,如果删除父行,它将首先删除子行,然后再删除父行,以确保不保留任何引用作为外键

对于您的问题,由于表B引用了表A的主键,而表C引用了表B的主键,因此删除级联上应该起作用的关系只是一个父级子级,而不是其他子级。