數據庫中的丟失更新,髒讀,不可重複讀,幻讀

丟失更新

A事務撤銷時,把已經提交的B事務的更新數據覆蓋了。
在這裏插入圖片描述

髒讀

髒讀發生在一個事務A讀取了被另一個事務B修改,但是還未提交的數據。
假如B回退,則事務A讀取的是無效的數據。
在這裏插入圖片描述

不可重複讀(針對update操作)

指在一個事務A內,多次讀同一個數據,但是事務A沒有結束時,另外一個事務B則修改了該數據。
那麼事務A在 B事務修改數據之後再次讀取該數據, A事務讀到的數據可能和第一次讀到的數據不一樣。

這就發生了在一個事務內兩次讀到的數據不一樣,這就被稱作不可重複讀。
在這裏插入圖片描述

幻讀 (針對insert,delete操作)

幻讀發生在當兩個完全相同的查詢執行時,第二次查詢所返回的結果集跟第一個查詢不相同。

隔離級別

  1. Read UnCommitted(讀未提交) - 解決丟失更新
    最低的隔離級別。一個事務可以讀取另一個事務並未提交的更新結果。

  2. Read Committed(讀提交) - 解決丟失更新,髒讀
    大部分數據庫採用的默認隔離級別。一個事務的更新操作結果只有在該事務提交之後,另一個事務纔可以的讀取到同一筆數據更新後的結果。

  3. Repeatable Read(重複讀) - 解決丟失更新,髒讀,不可重複讀
    mysql的默認級別。整個事務過程中,對同一筆數據的讀取結果是相同的,不管其他事務是否在對共享數據進行更新,也不管更新提交與否。

  4. Serializable(序列化) - 解決丟失更新,髒讀,不可重複讀,幻讀
    最高隔離級別。所有事務操作依次順序執行。注意這會導致併發度下降,性能最差。通常會用其他併發級別加上相應的併發鎖機制來取代它。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章