2017-08-07 101 views
0

我有沒有「ON DELETE CASCADE」的table1的colum1。如果colum沒有ON DELETE CASCADE,如何執行級聯刪除?

而來自table2的colum2,來自table3的colum3。兩者都有外鍵colum1

我如何刪除column1中的值以及表2和表3中具有外鍵給column1的值?

編輯: 我不能從子表中刪除行,然後從父表中刪除。 我有一個複雜的сonnections,其中從表4點 colum4從表3 colum3等非常龐大的數據庫...

回答

0

你不需要ON DELETE CASCADE,從子表只是DELETE行再從父表。

DELETE FROM table2 
WHERE column2 = ?; 

DELETE FROM table3 
WHERE column3 = ?; 

DELETE FROM table1 
WHERE column1 = ?; 

編輯:

我不能從父表中刪除子表中的行即可。我有非常龐大的數據庫,有複雜的連接,其中table4中的colum4指向table3中的colum3,等等。

明確地做到這一點比根據多個級聯的DELETE更安全,您最終可能會發生意外刪除。

+0

@macmoonshine它也可能是非常危險的。我更喜歡明確的'DELETE' :) – lad2025

+0

請注意,如果您嘗試從父項中刪除,postgresql會告訴您哪些子行失敗。因此,您可以嘗試刪除父項,獲取錯誤,解析它,然後刪除子錶行。 –

0

您只需在刪除父記錄之前刪除子記錄。除了CASCADE之外,沒有其他方法可以實現這一點。數據庫有DDL的原因;對,錯,或無動於衷。