注意我們現(xiàn)在的隔離級別是讀未提交,即最低的隔離級別。這種級別下會出現(xiàn)臟讀,A事務(wù)修改了一行數(shù)據(jù),但在未提交的情況下,這一行數(shù)據(jù)被A事務(wù)以外的行為,簡稱為F,這個F可能是B事務(wù),也或者是簡單的非事務(wù)類型的select,給讀取了,然后A事務(wù)進行了回滾,則F讀到的是臟數(shù)據(jù)?,F(xiàn)在看來一切都很通暢。但是我有一點疑惑,我們知道,innodb下簡單的select都是快照讀(MVCC提供),那么上面F所做的應(yīng)該也是快照讀,難道當(dāng)A事務(wù)修改完那一行數(shù)據(jù)之后就立刻進行了快照?否則F怎么會讀到A事務(wù)對那一行修改完的那個版本呢?應(yīng)該是F讀到A對那一行修改前的版本吧?多問一句,innodb只要在那一行數(shù)據(jù)的鎖被釋放之后就會進行快照?快照是如何被觸發(fā)的?
3 回答

牛魔王的故事
TA貢獻1830條經(jīng)驗 獲得超3個贊
你先好好的理解下事務(wù)的4個隔離級別概念,然后在了解下快照概念即可,一般來說,如果你了解透隔離級別的,就知道怎么操作了,不用你想的那么麻煩

炎炎設(shè)計
TA貢獻1808條經(jīng)驗 獲得超4個贊
上面F所做的應(yīng)該也是快照讀,難道當(dāng)A事務(wù)修改完那一行數(shù)據(jù)之后就立刻進行了快照?否則F怎么會讀到A事務(wù)對那一行修改完的那個版本呢?應(yīng)該是F讀到A對那一行修改前的版本吧?
F讀到的數(shù)據(jù)是A事務(wù)開始前的快照,A事務(wù)在未完成前的更新操作,對其他connection的F是不可見的,如果F也更新,需要等待A事務(wù)結(jié)束
添加回答
舉報
0/150
提交
取消