2013-10-28 64 views
4

是否有某種神奇的SQL語句刪除一行及其所有依賴項(通過外鍵約束鏈接)WITHOUT更改表添加ON DELETE CASCADE或刪除每個依賴行手動?級聯刪除像ON DELETE CASCADE在MySQL中執行一次操作

我幻想着一些諸如DELETE FROM `table_a` WHERE `id` = 1 ON DELETE CASCADE;,但我似乎無法找到任何在doc這種效果@http://dev.mysql.com/doc/refman/5.5/en/delete.html

  • 我不想ALTER表格只改變一個約束一次操作,然後將其恢復使用其它ALTER
  • 我不想執行類似DELETE FROM `table_b` WHERE `a_id` = 1;包含一個FK每桌table_a

在InnoDB中使用MySQL 5.5

回答

6

不,簡單的答案是,不,沒有捷徑。

您要麼寫下DELETE語句以刪除相關表中的所有相關行,要麼使用ON DELETE CASCADE定義外鍵約束。

需要注意的是 - 只要有外鍵關係,沒有循環路徑 - 這是可以使用一個單一的DELETE語句從多個表中刪除:

DELETE a, b, c, d 
FROM a 
    LEFT JOIN b ON b.a_id = a.a_id 
    LEFT JOIN c ON c.a_id = a.a_id 
    LEFT JOIN d ON d.b_id = b.b_id 
WHERE 
    a.a_id = 1 ; 
+0

多倒黴......反正我忘了使用一個DELETE語句JOINs,謝謝你的建議。 – user193130