MySQL為什么RR隔離級別添加了間隙鎖還是無法解決幻讀問題?
什么是幻讀?
幻讀本質上也屬于不可重復讀的情況,T1 讀取某個范圍的資料,T2 在這個范圍內插入或者洗掉新的資料,T1 再次讀取這個范圍的資料,此時讀取的結果和和第一次讀取的結果不同,
我的理解
我的理解是:間隙鎖只能保證范圍內的鍵不被插入,無法保證范圍內的鍵不被洗掉,如果在事務執行期間另一個事務洗掉了該范圍內的某一行資料,原事務再次查詢時就會發現出現了幻讀,
比如索引1,3有資料,然后加了間隙鎖,那么查詢1-3之間的資料的時候,會查詢到兩條記錄,并且因為間隙鎖的存在,所以無法添加資料,但是索引1或者3本身所代表的資料可能會被洗掉,所以再次查詢的時候會只查詢到1潭訓者0條記錄,
所以添加了間隙鎖能夠解區域分的幻讀問題,而不能解決全部的幻讀問題!真正解決幻讀問題還是要添加鄰健鎖(Next-Key Locks),在可重復讀(REPEATABLE READ)隔離級別下,使用 MVCC + Next-Key Locks 可以解決幻讀問題,或者可以考慮使用更高的隔離級別,如Serializable隔離級別,
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/546764.html
標籤:其他
下一篇:Redis的快取一致性問題詳解
