1 取消AB兩個表之間的外鍵關系,這樣就可以在刪除數據的時候就可以先刪除主表A,然後刪除子表B,讓對這兩個表操作的事務訪問順序一致。
2 刪除A表數據之前,先使用一個事務將B表中相關外鍵指向另外A表中的另外一個數據(比如在A表中專門建一行數據,主鍵設置為0,永遠不會對這行數據執行刪除操作),這樣就消除了要被刪除的數據在AB兩個表中的關系。然後就可以使用刪除事務,先刪除A表中的數據,再刪除B表中的數據,以達到和插入事務表訪問一致,避免死鎖。
3 在外鍵關系中,將“刪除規則”設置為“層疊”,這樣刪除事務只需要直接去刪除主表A,而不需要對子表B進行操作。因為刪除規則設置為層疊以後,刪除主表中的數據,子表中所有外鍵關聯的數據也同時刪除了。
以上三個解決辦法都是同事給出的建議,我也不知道到底該使用什麼辦法才好。
不知道對於這種情況要防止死鎖大家還有沒有什麼其他好辦法?