【问题标题】:How perform cascade delete if colum doesn't have ON DELETE CASCADE?如果列没有 ON DELETE CASCADE,如何执行级联删除?
【发布时间】:2017-08-07 17:04:20
【问题描述】:

我有来自 table1 的 colum1 没有“ON DELETE CASCADE”。

还有table2中的colum2,table3中的colum3。两者都有colum1的外键

如何删除 column1 中的值以及表 2 和表 3 中具有 column1 外键的值?

编辑: 我不能从子表中删除行,然后从父表中删除行。 我有非常庞大的数据库,具有复杂的连接,其中 table4 中的colum4 指向table3 中的colum3,依此类推...

【问题讨论】:

    标签: sql postgresql sql-delete


    【解决方案1】:

    您只需在删除父记录之前删除子记录。在 CASCADE 之外,没有其他方法可以实现这一点。数据库有 DDL 是有原因的;对、错或无所谓。

    【讨论】:

      【解决方案2】:

      您不需要ON DELETE CASCADE,只需要来自子表然后来自父表的DELETE 行。

      DELETE FROM table2
      WHERE column2 = ?;
      
      DELETE FROM table3
      WHERE column3 = ?;
      
      DELETE FROM table1
      WHERE column1 = ?;
      

      编辑:

      我无法从子表中删除行,然后从父表中删除行。我有非常庞大的数据库,具有复杂的连接,其中 table4 中的 colum4 指向 table3 中的 colum3 等等。

      明确地执行此操作总是比依赖多个级联 DELETE 更安全,因为您最终可能会意外删除。

      【讨论】:

      • @macmoonshine 这也可能非常危险。我更喜欢明确的DELETE :)
      • 请注意,如果您尝试从父级删除,postgresql 会告诉您哪些子行失败。所以你可以尝试在父级上删除,抓取错误,解析它,然后删除子表行。
      猜你喜欢
      • 1970-01-01
      • 2013-09-20
      • 1970-01-01
      • 1970-01-01
      • 2016-09-28
      • 2015-01-27
      • 2018-12-01
      • 1970-01-01
      相关资源
      最近更新 更多