我有沒有「ON DELETE CASCADE」的table1的colum1。如果colum沒有ON DELETE CASCADE,如何執行級聯刪除?
而來自table2的colum2,來自table3的colum3。兩者都有外鍵colum1
我如何刪除column1中的值以及表2和表3中具有外鍵給column1的值?
編輯: 我不能從子表中刪除行,然後從父表中刪除。 我有一個複雜的сonnections,其中從表4點 colum4從表3 colum3等非常龐大的數據庫...
我有沒有「ON DELETE CASCADE」的table1的colum1。如果colum沒有ON DELETE CASCADE,如何執行級聯刪除?
而來自table2的colum2,來自table3的colum3。兩者都有外鍵colum1
我如何刪除column1中的值以及表2和表3中具有外鍵給column1的值?
編輯: 我不能從子表中刪除行,然後從父表中刪除。 我有一個複雜的сonnections,其中從表4點 colum4從表3 colum3等非常龐大的數據庫...
你不需要ON DELETE CASCADE
,從子表只是DELETE
行再從父表。
DELETE FROM table2
WHERE column2 = ?;
DELETE FROM table3
WHERE column3 = ?;
DELETE FROM table1
WHERE column1 = ?;
編輯:
我不能從父表中刪除子表中的行即可。我有非常龐大的數據庫,有複雜的連接,其中table4中的colum4指向table3中的colum3,等等。
明確地做到這一點比根據多個級聯的DELETE
更安全,您最終可能會發生意外刪除。
您只需在刪除父記錄之前刪除子記錄。除了CASCADE之外,沒有其他方法可以實現這一點。數據庫有DDL的原因;對,錯,或無動於衷。
@macmoonshine它也可能是非常危險的。我更喜歡明確的'DELETE' :) – lad2025
請注意,如果您嘗試從父項中刪除,postgresql會告訴您哪些子行失敗。因此,您可以嘗試刪除父項,獲取錯誤,解析它,然後刪除子錶行。 –