髒讀:乙個事務讀取到了另乙個事務還未提交得資料。例:事務a開啟,事務b開啟,賬戶有1000元,事務b轉賬轉入500元,事務a查詢賬戶,發現有1500元(髒讀產生),此時事務b發生了未知錯誤,事務回滾,賬戶變為原來的1000元,賬戶只有1000元,事務a卻查詢到1500元。
不可重複讀:在乙個事務中,兩次查詢的資料不一致。例:事務a開啟,查詢賬戶有1000元,事務b開啟,事務b轉賬轉入500元,事務b提交,事務a再次查詢,發現有1500元,和上一次查詢的結果不一致。
幻讀:事務a按照某個條件查詢到了一些資料,事務b插入或者刪除了一些滿足條件的資料,事務a再次按照上次的條件操作這些資料時,會發現資料的數量會變多或者變少的現象。例:事務a讀取滿足條件a的資料,假設有10條資料,事務a還沒有提交,然後事務b插入了一條滿足條件a的資料,事務b提交,然後事務a再次查詢滿足條件a的資料,發現還是10條(這裡讀取的是快照,因此沒有產生幻讀的現象),若事務a刪除滿足條件a的資料,在事務a看來只會刪掉10條資料(因為事務a查詢出來的資料只有10條),但是執行刪除時發現刪掉了11條資料,在事務a看來就很奇怪,出現了幻讀。
(以上針對的是mysql5.7版本)
快照讀可前往部落格:
髒讀,不可重複讀,幻讀
髒讀,不可重複讀,幻讀是由於資料庫事務的隔離性導致的問題。髒讀 乙個事務讀取到了其它未提交事務操作的記錄。不可重複讀 乙個事務a內,首次查詢到一條相同記錄,然後事務b修改該條記錄並提交,事務a再次執行相同查詢,得到了事務b更新後的結果,事務a兩次相同的查詢,卻得到了不同的結果,這個叫做不可重複讀。是...
髒讀 不可重複讀 幻讀
髒讀 事務a使用了資料,但是還沒來得及提交,事務b就使用了這個資料,對於事務b來說就是髒讀。允許髒讀 sql server select from category with nolock 不可重複讀 事務a在9點和12點都會操作乙份資料,但是在10點的時候,事務b也操作了該份資料,並且使其數值進行...
髒讀 不可重複讀 幻讀
總結 對於不可重複讀和幻讀的區別是 不可重複讀圈了一塊地,這塊地不允許任何人動用,但是不管旁邊的地方是否開闢了一塊地。幻讀是不僅是圈的地,而且附近也不允許有新的地。這個對於區間查詢會有影響。所以不可重複讀和幻讀最大的區別是區間查詢的結果會不會一樣。幻讀保證結果一樣,但是不可重複讀不保證。mysql的...