事務是併發控制的基本單位,保證事務的ACID特性是事務處理的重要任務,而事務ACID特性可能遭到破壞的原因之一就是多個事務對數據庫的併發操作造成的。
併發操作帶來的數據不一致性有:丟失修改,不可重複讀,髒讀。
1. 丟失修改
兩個事務T1和T2讀入同一個數據並修改,T2提交的結果破壞了T1提交的結果,導致了T1的修改被丟失。典型例子:買飛機票或者火車票的例子。
2. 不可重複讀
不可重複讀指的是事務T1讀取數據後,事務T2執行更新操作,使T1無法再現前一次讀取的結果。
分爲以下三種情況:
(1)事務T1讀取了某一數據後,事務T2對其做了修改,當事務T1再次讀數據時,得到了與前一次不同的值。
(2)事務T1讀取了某一數據後,事務T2刪除了其中的記錄,當事務T1再次讀數據時,發現某些記錄神祕消失了。
(3)事務T1讀取了某一數據後,事務T2插入了一些新的記錄,當事務T1再次讀數據時,發現多了一些記錄。
後兩種操作叫做幻影現象或幻讀。
注:
不可重複讀的重點是修改 :
同樣的條件 , 你讀取過的數據 , 再次讀取出來發現值不一樣了
幻讀的重點在於新增或者刪除
同樣的條件 , 第 1 次和第 2 次讀出來的記錄數不一樣
3.髒讀(讀“髒”數據)
讀“髒”數據只得是事務T1修改了某一數據,並將其寫回磁盤,事務T2讀取某一數據後,T1由於某種原因撤銷了操作,恢復原值,這時T2讀到的數據就和數據庫中的數據不一致,稱爲讀“髒”數據。
產生以上三種現象的原因是併發操作破壞了事務的隔離性。爲了應對這些數據不一致性,主要技術主要有:封鎖,時間戳,樂觀控制法。
參考:
https://blog.csdn.net/when_less_is_more/article/details/62440192
https://www.cnblogs.com/phoebus0501/archive/2011/02/28/1966709.html