Fork me on GitHub

3/14/2014

[MySQL] Multiple foreign key cascade delete

事情是這樣的, 遇到了一個 table B, 他分別 foreign key 到另外兩個 table AC, 我在 B to C 的 foreign key 上面設定了 on delete cascade, 但是我希望 B 因為 C 被刪除也跟著被 cascade delete 的時候, A 也可以一起被刪除.

除了 trigger 之外, 我想不到什麼其他更好的作法, 所以上 stackoverflow 發問一下: http://stackoverflow.com/questions/22341402/mysql-table-multi-foreign-key-cascade, 下面有人提到 DB 的 foreign key 並沒有一對一的限制, 所以希望作到這件事其實有點違背邏輯. 於是乎只好尋求 trigger 一解.

正當我要定義一個 ON DELETE B 的 trigger 去殺掉 A 的時候, 發現由 C cascade delete 驅動 B 刪除, 並不會觸發該 trigger, 上網一查才發現, MySQL 的手冊上寫著 Triggers currently are not activated by foreign key actions.

目前想到的解決方式, 就是原本的 on delete cascade 部份也改成用 trigger...

-- EOF --