關於不可重復讀和幻讀的一點點理解


不可重復讀主要是針對update和delete來說,而幻讀則是針對insert來說。

不可重復讀的簡單理解

事務A進行查詢,事務未提交。而事務B此時對記錄進行update,並提交事務。當事務A再次查詢(事務未提交的時候),發現兩次數據不一樣,則是重復讀。

幻讀的理解

事務A查詢表中的所有記錄數,未提交事務,此時事務B insert了一條數據,提交事務。當事務A再次查詢(事務未提交的時候),發現多了一條數據。

對比

兩者產生的結果都是前后數據不一致,但是對於不可重復讀 可以針對查詢的那條數據加索即行鎖,保證只有當前事務能夠對這條記錄進行更新,刪除等。就可以重復讀。MySQL的默認隔離級別就是可重復讀 REPEATABLE-READ。而要消滅幻讀則要鎖住整張表,保證當前操作的時候,不能有其他事務對表進行insert操作。可將數據庫的隔離級別設置為serializable即串行化來避免。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM