丟失更新
A事務撤銷時,把已經提交的B事務的更新數據覆蓋了。
髒讀
髒讀發生在一個事務A讀取了被另一個事務B修改,但是還未提交的數據。
假如B回退,則事務A讀取的是無效的數據。
不可重複讀(針對update操作)
指在一個事務A內,多次讀同一個數據,但是事務A沒有結束時,另外一個事務B則修改了該數據。
那麼事務A在 B事務修改數據之後再次讀取該數據, A事務讀到的數據可能和第一次讀到的數據不一樣。
這就發生了在一個事務內兩次讀到的數據不一樣,這就被稱作不可重複讀。
幻讀 (針對insert,delete操作)
幻讀發生在當兩個完全相同的查詢執行時,第二次查詢所返回的結果集跟第一個查詢不相同。
隔離級別
-
Read UnCommitted(讀未提交) - 解決丟失更新
最低的隔離級別。一個事務可以讀取另一個事務並未提交的更新結果。 -
Read Committed(讀提交) - 解決丟失更新,髒讀
大部分數據庫採用的默認隔離級別。一個事務的更新操作結果只有在該事務提交之後,另一個事務纔可以的讀取到同一筆數據更新後的結果。 -
Repeatable Read(重複讀) - 解決丟失更新,髒讀,不可重複讀
mysql的默認級別。整個事務過程中,對同一筆數據的讀取結果是相同的,不管其他事務是否在對共享數據進行更新,也不管更新提交與否。 -
Serializable(序列化) - 解決丟失更新,髒讀,不可重複讀,幻讀
最高隔離級別。所有事務操作依次順序執行。注意這會導致併發度下降,性能最差。通常會用其他併發級別加上相應的併發鎖機制來取代它。