国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 開發 > 綜合 > 正文

如何防止插入刪除表造成的數據庫死鎖

2024-07-21 02:13:42
字體:
來源:轉載
供稿:網友

在數據庫中經常會遇到這樣的情況:一個主表a,一個子表b,b表中包含有a表的主鍵作為外鍵。當要插入數據的時候,我們會先插入a表,然后獲得a表的identity,再插入b表。如果要進行刪除操作,那么就先刪除子表b,然后再刪除主表a。在程序設計中,對兩個表的操作是在一個事務之中完成的。

當系統使用頻繁就會出現插入操作和刪除操作同時進行的情況。這個時候插入事務會先將主表a放置獨占鎖,然后去訪問子表b,而同時刪除事務會對子表b放置獨占鎖,然后去訪問主表a。插入事務會一直獨占著a表,等待訪問b表,刪除事務也一直獨占著b表等待訪問a表,于是兩個事務相互獨占一個表,等待對方釋放資源,這樣就造成了死鎖。

遇到這種情況我聽說了三種做法:

1 取消ab兩個表之間的外鍵關系,這樣就可以在刪除數據的時候就可以先刪除主表a,然后刪除子表b,讓對這兩個表操作的事務訪問順序一致。

2 刪除a表數據之前,先使用一個事務將b表中相關外鍵指向另外a表中的另外一個數據(比如在a表中專門建一行數據,主鍵設置為0,永遠不會對這行數據執行刪除操作),這樣就消除了要被刪除的數據在ab兩個表中的關系。然后就可以使用刪除事務,先刪除a表中的數據,再刪除b表中的數據,以達到和插入事務表訪問一致,避免死鎖。

3 在外鍵關系中,將“刪除規則”設置為“層疊”,這樣刪除事務只需要直接去刪除主表a,而不需要對子表b進行操作。因為刪除規則設置為層疊以后,刪除主表中的數據,子表中所有外鍵關聯的數據也同時刪除了。

以上三個解決辦法都是同事給出的建議,我也不知道到底該使用什么辦法才好。

不知道對于這種情況要防止死鎖大家還有沒有什么其他好辦法?

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 曲阜市| 九龙坡区| 岱山县| 留坝县| 大冶市| 阿克陶县| 龙南县| 上蔡县| 朝阳市| 仁化县| 洛扎县| 河津市| 阜城县| 双鸭山市| 乳源| 乡城县| 河曲县| 永清县| 溧水县| 姚安县| 新巴尔虎右旗| 洞头县| 清涧县| 宁南县| 阆中市| 恩施市| 青海省| 漯河市| 新源县| 涿州市| 怀远县| 呼图壁县| 海淀区| 铁力市| 临海市| 白河县| 百色市| 辽中县| 栖霞市| 汤原县| 施秉县|