mysql的MVCC機(jī)制

面試問(wèn)題:如果兩個(gè)客戶端同時(shí)執(zhí)行一個(gè)查詢sql,為什么查出的數(shù)據(jù)可能不一樣?

解答:是因?yàn)閙ysql底層維護(hù)了一個(gè)undo日志版本鏈和read-view一致性試圖機(jī)制,在repeatable-read隔離級(jí)別下,一個(gè)事務(wù)開(kāi)啟之后,當(dāng)執(zhí)行查詢語(yǔ)句的時(shí)候,就生成了一個(gè)read-view,之后查詢就會(huì)根據(jù)一定的規(guī)則去undo日志版本鏈中比對(duì)數(shù)據(jù);在read-commited隔離級(jí)別下,一個(gè)事務(wù)開(kāi)啟之后,每次執(zhí)行查詢語(yǔ)句的時(shí)候,都生成新的read-view,查詢就會(huì)根據(jù)和repeatable-read隔離級(jí)別下一樣的規(guī)則去undo日志版本鏈中比對(duì)數(shù)據(jù)。

對(duì)比規(guī)則如下:

如果版本鏈中的trx_id<min_id,說(shuō)明當(dāng)前事務(wù)可見(jiàn);

如果版本鏈中的trx_id>max_id,說(shuō)明當(dāng)前事務(wù)不可見(jiàn);

如果版本鏈中的min_id<=trx_id<=max_id,存在兩種判斷。

????????若版本鏈中的trx_id位于數(shù)組中,則說(shuō)明這個(gè)版本是由未提交的事務(wù)生成,不可見(jiàn)。

????????若版本鏈中的trx_id不在數(shù)組中,說(shuō)明這個(gè)版本是由已提交的事務(wù)生成,可見(jiàn)。


如下例:


分析:


?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • MVCC并發(fā)控制中,讀操作可以分成兩類:快照讀 (snapshot read)與當(dāng)前讀 (current read...
    尹楷楷閱讀 1,175評(píng)論 0 5
  • 我們都知道事務(wù)的4個(gè)特性,原子性 一致性 隔離性和持久化事務(wù)具有4個(gè)特征,分別是原子性、一致性、隔離性和持久性,簡(jiǎn)...
    念?閱讀 1,361評(píng)論 0 0
  • 1 Mysql中的一些日志文件跟事務(wù)隔離性的介紹 1.1 redo log redo log就是保存執(zhí)行的SQL語(yǔ)...
    小狐憨憨閱讀 982評(píng)論 0 0
  • 1.文章適用對(duì)象: 能夠基本描述清楚mysql事務(wù)隔離級(jí)別 不可重復(fù)去或可重復(fù)讀的現(xiàn)象,想進(jìn)一步探討底層設(shè)計(jì)思想的...
    華北_b5ef閱讀 1,461評(píng)論 0 1
  • MySql事務(wù)實(shí)現(xiàn)的機(jī)制:MVCC 這一篇將簡(jiǎn)單說(shuō)明一下最近學(xué)習(xí)了Mysql的事務(wù)實(shí)現(xiàn)的簡(jiǎn)單理解。 如果存在一張A...
    zekers閱讀 670評(píng)論 0 0

友情鏈接更多精彩內(nèi)容