如何防止插入刪除表造成的資料庫死鎖
在資料庫中經常會遇到這樣的情況:乙個主表a,乙個子表b,b表中包含有a表的主鍵作為外來鍵。當要插入資料的時候,我們會先插入a表,然後獲得a表的identity,再插入b表。如果要進行刪除操作,那麼就先刪除子表b,然後再刪除主表a。在程式設計中,對兩個表的操作是在乙個事務之中完成的。
www^chinaz^com
當系統使用頻繁就會出現插入操作和刪除操作同時進行的情況。這個時候插入事務會先將主表a放置獨佔鎖,然後去訪問子表b,而同時刪除事務會對子表b放置獨佔鎖,然後去訪問主表a。插入事務會一直獨佔著a表,等待訪問b表,刪除事務也一直獨佔著b表等待訪問a表,於是兩個事務相互獨佔乙個表,等待對方釋放資源,這樣就造成了死鎖。
遇到這種情況我聽說了三種做法:
1 取消ab兩個表之間的外來鍵關係,這樣就可以在刪除資料的時候就可以先刪除主表a,然後刪除子表b,讓對這兩個表操作的事務訪問順序一致。
2 刪除a表資料之前,先使用乙個事務將b表中相關外來鍵指向另外a表中的另外乙個資料(比如在a表中專門建一行資料,主鍵設定為0,永遠不會對這行資料執行刪除操作),這樣就消除了要被刪除的資料在ab兩個表中的關係。然後就可以使用刪除事務,先刪除a表中的資料,再刪除b表中的資料,以達到和插入事務表訪問一致,避免死鎖。
3 在外鍵關係中,將「刪除規則」設定為「層疊」,這樣刪除事務只需要直接去刪除主表a,而不需要對子表b進行操作。因為刪除規則設定為層疊以後,刪除主表中的資料,子表中所有外來鍵關聯的資料也同時刪除了。 chinaz~com
以上三個解決辦法都是同事給出的建議,我也不知道到底該使用什麼辦法才好。
不知道對於這種情況要防止死鎖大家還有沒有什麼其他好辦法?
資料庫常見十大錯誤No8 備份出錯
sql server資料庫備份出錯及應對措施 早上看了乙個貼子,是乙個哥們推廣自己乙個智慧型的資料庫備份系統,他總結了資料庫備份過程中所有可能出錯的情況,可以借鑑。如果你做dba時間不長,對資料庫的備份有些擔心,希望能找到一種讓你放心的備份方案,那麼本文絕對適合你。關於資料庫的備份恢復原理,大家多少...
資料探勘的十大錯誤現象 翻譯
在癌症檢測的專案中,醫生和研究人員在使用神經網路訓練資料時驚奇發現 訓練長時間 幾周或幾天 的訓練對結果的提高是有限的,更多時候會有更糟糕的評估結果。2.依賴於一種技術rely on one technique to a little boy with a hammer,all the world ...
在資料視覺化中,最容易犯的十大錯誤
使用資料視覺化來進行資料分析的過程是 獲取無聊的平面資料,並通過視覺化將其變為現實。但是,在資料分析的過程中很多人開始敏銳地意識到視覺化有可能會變成讓資料以錯誤的方式呈現,甚至有的人開始提出 視覺化經常被用來擾亂資料分析過程。在我們網際網路資訊快速發展下,資料比以往任何時候都更加豐富和可通過網際網路...