鍍金池/ 問(wèn)答/數(shù)據(jù)庫(kù)/ 在innodb的讀未提交的隔離級(jí)別下,mvcc的行為?

在innodb的讀未提交的隔離級(jí)別下,mvcc的行為?

注意我們現(xiàn)在的隔離級(jí)別是讀未提交,即最低的隔離級(jí)別。這種級(jí)別下會(huì)出現(xiàn)臟讀,A事務(wù)修改了一行數(shù)據(jù),但在未提交的情況下,這一行數(shù)據(jù)被A事務(wù)以外的行為,簡(jiǎn)稱為F,這個(gè)F可能是B事務(wù),也或者是簡(jiǎn)單的非事務(wù)類型的select,給讀取了,然后A事務(wù)進(jìn)行了回滾,則F讀到的是臟數(shù)據(jù)。現(xiàn)在看來(lái)一切都很通暢。

但是我有一點(diǎn)疑惑,我們知道,innodb下簡(jiǎn)單的select都是快照讀(MVCC提供),那么上面F所做的應(yīng)該也是快照讀,難道當(dāng)A事務(wù)修改完那一行數(shù)據(jù)之后就立刻進(jìn)行了快照?否則F怎么會(huì)讀到A事務(wù)對(duì)那一行修改完的那個(gè)版本呢?應(yīng)該是F讀到A對(duì)那一行修改前的版本吧?

多問(wèn)一句,innodb只要在那一行數(shù)據(jù)的鎖被釋放之后就會(huì)進(jìn)行快照?快照是如何被觸發(fā)的?

回答
編輯回答
毀與悔

上面F所做的應(yīng)該也是快照讀,難道當(dāng)A事務(wù)修改完那一行數(shù)據(jù)之后就立刻進(jìn)行了快照?否則F怎么會(huì)讀到A事務(wù)對(duì)那一行修改完的那個(gè)版本呢?應(yīng)該是F讀到A對(duì)那一行修改前的版本吧?

F讀到的數(shù)據(jù)是A事務(wù)開(kāi)始前的快照,A事務(wù)在未完成前的更新操作,對(duì)其他connection的F是不可見(jiàn)的,如果F也更新,需要等待A事務(wù)結(jié)束

2018年5月6日 13:15
編輯回答
雨蝶

你先好好的理解下事務(wù)的4個(gè)隔離級(jí)別概念,然后在了解下快照概念即可,一般來(lái)說(shuō),如果你了解透隔離級(jí)別的,就知道怎么操作了,不用你想的那么麻煩

2017年9月15日 08:49
編輯回答
薄荷綠

你都是讀未提交了哪還有什么mvcc
mvcc主要是為了解決幻讀問(wèn)題的
快照的生成就是為了讓別人讀到的是你修改之前的數(shù)據(jù),你都讀到未提交了還要什么快照
然后快照是取數(shù)據(jù)的時(shí)候生成的,不管你是要select還是update,都會(huì)生成一個(gè)快照
修改之后生成快照。。那豈不是整個(gè)數(shù)據(jù)庫(kù)的數(shù)據(jù)都要存一個(gè)快照。。
你還需要好好理解一下這些概念

2018年3月29日 09:47
編輯回答
尐懶貓

瀉藥,我對(duì)這塊不是很熟悉,不好意思。

2018年5月13日 03:27