innodbnext-keylock引發(fā)的死鎖現(xiàn)象分析

這個例子是我在網(wǎng)上看到的,我分析了很久才弄明白鎖產(chǎn)生的具體過程。

數(shù)據(jù)庫的事務(wù)隔離級別是RR。

建測試表:
CREATE TABLE `LockTest` (
   `order_id` varchar(20) NOT NULL,
   `id` bigint(20) NOT NULL AUTO_INCREMENT,
   PRIMARY KEY (`id`),
   KEY `idx_order_id` (`order_id`)
 ) ENGINE=InnoDB AUTO_INCREMENT=16 DEFAULT CHARSET=utf8;

測試步驟:
事務(wù)1 事務(wù)2

begin

網(wǎng)站建設(shè)哪家好,找創(chuàng)新互聯(lián)建站!專注于網(wǎng)頁設(shè)計、網(wǎng)站建設(shè)、微信開發(fā)、成都微信小程序、集團企業(yè)網(wǎng)站建設(shè)等服務(wù)項目。為回饋新老客戶創(chuàng)新互聯(lián)還提供了文圣免費建站歡迎大家使用!

delete from LockTest where order_id =  'D20'

 
 

 

begin

delete from LockTest where order_id =  'D19'

insert into LockTest (order_id) values ('D20')

 
 

insert into LockTest (order_id) values ('D19')

commit

commit


測試結(jié)果:
事務(wù)1 執(zhí)行到insert語句會block住,事務(wù)2執(zhí)行insert語句會提示死鎖錯誤。

原因分析:
1、首先看測試表的建表語句,id是主鍵索引,同時該主鍵是自增主鍵。order_id是普通索引。
2、事務(wù)1執(zhí)行delete from LockTest where order_id =  'D20';語句時,由于數(shù)據(jù)庫的隔離級別是RR,因此此時事務(wù)1在主鍵id上獲得了一個next-key lock,這個鎖的范圍是[16, +∞)。
   這個16就來自于AUTO_INCREMENT=16,因為LockTest目前是張空表。
3、同理,事務(wù)2執(zhí)行delete from LockTest where order_id =  'D19';語句時,由于數(shù)據(jù)庫的隔離級別是RR,事務(wù)2在主鍵id上也獲得了一個next-key lock,這個鎖的范圍是[16, +∞)。
   也就是說此時,事務(wù)1和事務(wù)2獲得的鎖是一樣的。
4、事務(wù)1繼續(xù)執(zhí)行insert into LockTest (order_id) values ('D20');語句,這個時候由于該語句企圖往LockTest表insert一行id=16,order_id=D20的數(shù)據(jù),
   但是由于在事務(wù)2的delete語句中,主鍵id上已經(jīng)有了一個范圍為[16, +∞)的鎖,導(dǎo)致事務(wù)1此時想插入數(shù)據(jù)插不進去,被阻塞了。
5、繼續(xù)事務(wù)2的插入語句insert into LockTest (order_id) values ('D19'); 該插入語句同樣也想往LockTest表insert一行id=16,order_id=D19的數(shù)據(jù),
   但是由于由于在事務(wù)1的delete語句中,主鍵id上已經(jīng)有了一個范圍為[16, +∞)的鎖,導(dǎo)致事務(wù)2此時想插入數(shù)據(jù)插不進去,被阻塞了。
   此時,可以發(fā)現(xiàn),事務(wù)1和事務(wù)2的鎖是互相持有,互相等待的。所以innodb判斷該事務(wù)遇到了死鎖,直接將事務(wù)2進行了回滾。然后回頭去看事務(wù)1,insert into LockTest (order_id) values ('D20');被成功執(zhí)行。

如果你將數(shù)據(jù)庫的事務(wù)隔離級別修改為RC,上述事務(wù)會各自成功運行,不會互相影響。





分享標(biāo)題:innodbnext-keylock引發(fā)的死鎖現(xiàn)象分析
轉(zhuǎn)載注明:http://m.kartarina.com/article10/ijpego.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供微信公眾號網(wǎng)站維護、網(wǎng)站策劃、云服務(wù)器、App開發(fā)、靜態(tài)網(wǎng)站

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

網(wǎng)站優(yōu)化排名
主站蜘蛛池模板: 国99精品无码一区二区三区| 免费无码专区毛片高潮喷水 | 久久影院午夜理论片无码| 国产精品午夜无码AV天美传媒| 人妻av无码专区| 亚洲国产精品无码久久一线| 无码里番纯肉h在线网站| 97无码人妻福利免费公开在线视频 | 久久人妻少妇嫩草AV无码蜜桃| 日韩人妻无码精品一专区| 免费无码专区毛片高潮喷水| 伊人久久精品无码麻豆一区| 13小箩利洗澡无码视频网站免费 | 无码人妻丰满熟妇区五十路百度| 久久亚洲精品无码av| 日韩AV无码久久一区二区| 东京无码熟妇人妻AV在线网址| 69堂人成无码免费视频果冻传媒| 一夲道无码人妻精品一区二区| 亚洲av无码成人精品区在线播放| 无码人妻精品内射一二三AV| 无码专区—VA亚洲V天堂| 中日精品无码一本二本三本| 精品久久久久久无码中文字幕漫画| 精品日韩亚洲AV无码一区二区三区| 国内精品人妻无码久久久影院导航 | 亚洲中文字幕无码爆乳app| 国产精品无码AV一区二区三区| 亚洲AV无码成人精品区大在线| 欧洲黑大粗无码免费| 亚洲AV永久无码精品一福利| 亚洲AV综合色区无码二区偷拍 | 无码人妻一区二区三区免费看| 国产又爽又黄无码无遮挡在线观看| 国产精品无码专区在线播放| 国产莉萝无码AV在线播放| 男人av无码天堂| 精品少妇人妻av无码专区| 无码国模国产在线无码精品国产自在久国产 | 久久亚洲精品成人av无码网站| 亚洲AV无码一区二区三区系列|