不可重複讀主要是針對update和delete來說,而幻讀則是針對insert來說。
事務a進行查詢,事務未提交。而事務b此時對記錄進行update,並提交事務。當事務a再次查詢(事務未提交的時候),發現兩次資料不一樣,則是重複讀。
事務a查詢表中的所有記錄數,未提交事務,此時事務b insert了一條資料,提交事務。當事務a再次查詢(事務未提交的時候),發現多了一條資料。
兩者產生的結果都是前後資料不一致,但是對於不可重複讀 可以針對查詢的那條資料加索即行鎖,保證只有當前事務能夠對這條記錄進行更新,刪除等。就可以重複讀。mysql的預設隔離級別就是可重複讀 repeatable-read。而要消滅幻讀則要鎖住整張表,保證當前操作的時候,不能有其他事務對錶進行insert操作。可將資料庫的隔離級別設定為serializable即序列化來避免。
不可重複讀和幻讀的區別
1,不可重複讀是指事務a讀取表中資料的時候,此時事務b對該資料進行了修改,導致事務a再次讀取該資料時,發現不一樣 兩次讀取相同的資料產生不同的結果 2,幻讀是指事務a在修改某錶中的全部資料時,已經修改完畢,此時事務b又新插入一條記錄,導致事務a再次讀取該表中資料時,發現還有未修改的記錄,產生了幻覺 ...
MySQL的不可重複讀和幻讀
不可重複讀 不可重複讀是指在同乙個事務中,兩次 或以上 查詢發現符合條件的資料記錄的字段值發生了變化,導致不可重複讀出現的原因主要是update操作 不可重複讀的例子 alice和bob開啟了資料庫的兩個事務 bob讀取post comment表中所有post id為1的資料 alice修改了pos...
不可重複讀和幻讀的區別
當然,從總的結果來看,似乎兩者都表現為兩次讀取的結果不一致.但如果你從控制的角度來看,兩者的區別就比較大 對於前者,只需要鎖住滿足條件的記錄 對於後者,要鎖住滿足條件及其相近的記錄 我這麼理解是否可以?避免不可重複讀需要鎖行就行 避免幻影讀則需要鎖表 不可重複讀和幻讀的區別 很多人容易搞混不可重複讀...