亚洲成精品动漫久久精久,九九在线精品视频播放,黄色成人免费观看,三级成人影院,久碰久,四虎成人欧美精品在永久在线

掃一掃
關(guān)注微信公眾號(hào)

如何防止插入刪除表造成的數(shù)據(jù)庫(kù)死鎖
2010-03-05   網(wǎng)絡(luò)

在數(shù)據(jù)庫(kù)中經(jīng)常會(huì)遇到這樣的 情況:一個(gè)主表A,一個(gè)子表B,B表中包含有A表的主鍵作為外鍵。當(dāng)要插入數(shù)據(jù)的時(shí)候,我們會(huì)先插入A表,然后獲得A表的Identity,再插入B表。 如果要進(jìn)行刪除操作,那么就先刪除子表B,然后再刪除主表A。在程序設(shè)計(jì)中,對(duì)兩個(gè)表的操作是在一個(gè)事務(wù)之中完成的。

  當(dāng)系統(tǒng)使用頻繁就會(huì)出現(xiàn)插入操作和刪除操作同時(shí)進(jìn)行的情況。這個(gè)時(shí)候插入事務(wù)會(huì)先將主表A放置獨(dú)占鎖,然后去訪問(wèn)子表B,而同時(shí)刪除事務(wù)會(huì)對(duì)子 表B放置獨(dú)占鎖,然后去訪問(wèn)主表A。插入事務(wù)會(huì)一直獨(dú)占著A表,等待訪問(wèn)B表,刪除事務(wù)也一直獨(dú)占著B(niǎo)表等待訪問(wèn)A表,于是兩個(gè)事務(wù)相互獨(dú)占一個(gè)表,等待 對(duì)方釋放資源,這樣就造成了死鎖。

  遇到這種情況我聽(tīng)說(shuō)了三種做法:

  1 取消AB兩個(gè)表之間的外鍵關(guān)系,這樣就可以在刪除數(shù)據(jù)的時(shí)候就可以先刪除主表A,然后刪除子表B,讓對(duì)這兩個(gè)表操作的事務(wù)訪問(wèn)順序一致。

  2 刪除A表數(shù)據(jù)之前,先使用一個(gè)事務(wù)將B表中相關(guān)外鍵指向另外A表中的另外一個(gè)數(shù)據(jù)(比如在A表中專(zhuān)門(mén)建一行數(shù)據(jù),主鍵設(shè)置為0,永遠(yuǎn)不會(huì)對(duì)這行數(shù)據(jù)執(zhí)行刪 除操作),這樣就消除了要被刪除的數(shù)據(jù)在AB兩個(gè)表中的關(guān)系。然后就可以使用刪除事務(wù),先刪除A表中的數(shù)據(jù),再刪除B表中的數(shù)據(jù),以達(dá)到和插入事務(wù)表訪問(wèn) 一致,避免死鎖。

  3 在外鍵關(guān)系中,將“刪除規(guī)則”設(shè)置為“層疊”,這樣刪除事務(wù)只需要直接去刪除主表A,而不需要對(duì)子表B進(jìn)行操作。因?yàn)閯h除規(guī)則設(shè)置為層疊以后,刪除主表中 的數(shù)據(jù),子表中所有外鍵關(guān)聯(lián)的數(shù)據(jù)也同時(shí)刪除了。

熱詞搜索:

上一篇:如何建立綠色的磁盤(pán)到磁盤(pán)(D2D)備份
下一篇:部署iSCSI SAN中小企業(yè)6大注意事項(xiàng)

分享到: 收藏