mysql for update 死鎖問(wèn)題

在RR條件, id是主鍵,插入五條數(shù)據(jù)

id name
1 title1
2 title2
3 title3
9 title9
10 title10
session 1 session 2
begin; begin;
select * from user where id = 6 for update;
~ select * from user where id = 6 for update
insert into user 6, title6
鎖等待中 insert into user 6, title6
鎖等待解除 死鎖,session 2的事務(wù)被回滾

我們可以發(fā)現(xiàn)

針對(duì)事務(wù)一:select * from user where id = 6 for update; 第一次查詢,沒(méi)有找到滿足查詢條件的記錄,那么mysql會(huì)加一個(gè)gap鎖
但是事務(wù)2也可以執(zhí)行 select * from user where id = 6 for update;菠净,這個(gè)時(shí)候事務(wù)1和事務(wù)2都有3-9的GAP鎖,2個(gè)事務(wù)都不能執(zhí)行insert id=6的記錄彪杉,會(huì)報(bào)死鎖異常毅往。gap鎖本身的作用是防止后續(xù)的插入操作,因此gap鎖只跟插入相沖突派近,gap鎖之間不沖突攀唯,所以這個(gè)時(shí)候會(huì)發(fā)生死鎖。

我們更換SQL語(yǔ)句改為
SELECT * FROM user where id >5 and id <7 for update; 其余不變渴丸。 會(huì)發(fā)現(xiàn)兩條select語(yǔ)句會(huì)沖突侯嘀。
引用何登成的解釋?zhuān)?br> "按照原理來(lái)說(shuō),id>5 and id<7這個(gè)查詢條件谱轨,在表中找不到滿足條件的項(xiàng)戒幔,因此會(huì)對(duì)第一個(gè)不滿足條件的項(xiàng)(id = 9)上加GAP鎖,防止后續(xù)其他事務(wù)插入滿足條件的記錄土童。

而GAP鎖與GAP鎖是不沖突的诗茎,那么為什么兩個(gè)同時(shí)執(zhí)行id>5 and id<7查詢的事務(wù)會(huì)沖突呢?

原因在于献汗,MySQL Server并沒(méi)有將id<7這個(gè)查詢條件下降到InnoDB引擎層敢订,因此InnoDB看到的查詢王污,是id>5,正向掃描楚午。讀出的記錄id=9昭齐,先加上next key鎖(Lock X + GAP lock),然后返回給MySQL Server進(jìn)行判斷矾柜。
MySQL Server此時(shí)才會(huì)判斷返回的記錄是否滿足id<7的查詢條件阱驾。此處不滿足,查詢結(jié)束怪蔑。

因此里覆,id=9記錄上,真正持有的鎖是next key鎖饮睬,而next key鎖之間是相互沖突的租谈,這也說(shuō)明了為什么兩個(gè)id>5 and id<7查詢的事務(wù)會(huì)沖突的原因篮奄。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末捆愁,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子窟却,更是在濱河造成了極大的恐慌昼丑,老刑警劉巖,帶你破解...
    沈念sama閱讀 216,470評(píng)論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件夸赫,死亡現(xiàn)場(chǎng)離奇詭異菩帝,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)茬腿,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,393評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門(mén)呼奢,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人切平,你說(shuō)我怎么就攤上這事握础。” “怎么了悴品?”我有些...
    開(kāi)封第一講書(shū)人閱讀 162,577評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵禀综,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我苔严,道長(zhǎng)定枷,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,176評(píng)論 1 292
  • 正文 為了忘掉前任届氢,我火速辦了婚禮欠窒,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘退子。我一直安慰自己贱迟,他們只是感情好姐扮,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,189評(píng)論 6 388
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著衣吠,像睡著了一般茶敏。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上缚俏,一...
    開(kāi)封第一講書(shū)人閱讀 51,155評(píng)論 1 299
  • 那天惊搏,我揣著相機(jī)與錄音,去河邊找鬼忧换。 笑死恬惯,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的亚茬。 我是一名探鬼主播酪耳,決...
    沈念sama閱讀 40,041評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼刹缝!你這毒婦竟也來(lái)了碗暗?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 38,903評(píng)論 0 274
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤梢夯,失蹤者是張志新(化名)和其女友劉穎言疗,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體颂砸,經(jīng)...
    沈念sama閱讀 45,319評(píng)論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡噪奄,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,539評(píng)論 2 332
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了人乓。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片勤篮。...
    茶點(diǎn)故事閱讀 39,703評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖色罚,靈堂內(nèi)的尸體忽然破棺而出碰缔,到底是詐尸還是另有隱情,我是刑警寧澤保屯,帶...
    沈念sama閱讀 35,417評(píng)論 5 343
  • 正文 年R本政府宣布手负,位于F島的核電站,受9級(jí)特大地震影響姑尺,放射性物質(zhì)發(fā)生泄漏竟终。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,013評(píng)論 3 325
  • 文/蒙蒙 一切蟋、第九天 我趴在偏房一處隱蔽的房頂上張望统捶。 院中可真熱鬧,春花似錦、人聲如沸喘鸟。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,664評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)什黑。三九已至崎淳,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間愕把,已是汗流浹背拣凹。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,818評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留恨豁,地道東北人嚣镜。 一個(gè)月前我還...
    沈念sama閱讀 47,711評(píng)論 2 368
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像橘蜜,于是被迫代替她去往敵國(guó)和親菊匿。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,601評(píng)論 2 353