幻读是什么?(幻读到底是什么)
幻讀是什么?
幻讀就是事務(wù)A首先根據(jù)條件索引得到N條數(shù)據(jù),然后事務(wù)B改變了這N條數(shù)據(jù)之外的M條或者增添了M條符合事務(wù)A搜索條件的數(shù)據(jù),導(dǎo)致事務(wù)A再次搜索發(fā)現(xiàn)有N+M條數(shù)據(jù)了,這就會產(chǎn)生幻讀。
如何解決幻讀?
-
通過 next-key lock解決。
-
產(chǎn)生幻讀的原因是,行鎖只能鎖住行,但是新插入記錄這個動作,要更新的是記錄之間的“間隙”。因此,為了解決幻讀,InnoDB引入間隙鎖。
-
Gap lock間隙鎖在可重復(fù)讀級別下才有效
-
間隙鎖和行鎖合稱 next-key lock,每個 next-key lock 是前開后閉區(qū)間。
在數(shù)據(jù)庫定義的四種隔離級別中
最高隔離級別SERIALIZABLE_READ可以保證不出現(xiàn)幻讀的問題。
Repeatable Read (RR)
針對當(dāng)前讀,RR隔離級別保證對讀取到的記錄加鎖 (記錄鎖),同時保證對讀取的范圍加鎖,新的滿足查詢條件的記錄不能夠插入 (間隙鎖),不存在幻讀現(xiàn)象。
推薦教程:《MySQL教程》
以上就是幻讀是什么?的詳細內(nèi)容,更多請關(guān)注風(fēng)君子博客其它相關(guān)文章!
總結(jié)
以上是生活随笔為你收集整理的幻读是什么?(幻读到底是什么)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Dreamoon Likes Color
- 下一篇: Dreamoon Likes Seque