幻讀是什麼?
幻讀就是事務A首先根據條件索引得到N條數據,然後事務B改變了這N條數據之外的M條或者增添了M條符合事務A搜尋條件的數據,導致事務A再次搜尋發現有N M條資料了,這就會產生幻讀。
如何解決幻讀?
透過 next-key lock解決。
產生幻讀的原因是,行鎖只能鎖住行,但是新插入記錄這個動作,要更新的是記錄之間的「間隙」。因此,為了解決幻讀,InnoDB引入間隙鎖。
Gap lock間隙鎖定在可重複讀取等級下才有效
間隙鎖定和行鎖合稱next-key lock,每個next-key lock 是前開後閉區間。
在資料庫定義的四個隔離等級中
最高隔離等級SERIALIZABLE_READ可以保證不出現幻讀的問題。
Repeatable Read (RR)
針對目前讀,RR隔離等級保證對讀取到的記錄加鎖(記錄鎖),同時確保對讀取的範圍加鎖,新的滿足查詢條件的記錄不能夠插入(間隙鎖),不存在幻讀現象。
推薦教學:《MySQL教學》
以上是幻讀是什麼?的詳細內容。更多資訊請關注PHP中文網其他相關文章!