首頁 >常見問題 >幻讀是什麼?

幻讀是什麼?

Guanhui
Guanhui原創
2020-06-11 11:35:509110瀏覽

幻讀是什麼?

幻讀是什麼?

幻讀就是事務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中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn