1. 程式人生 > >資料庫併發一致性的問題

資料庫併發一致性的問題

在併發環境下,事務的隔離性很難保證,因此會出現很多併發一致性問題。

使用隔離級別來防止產生的併發一致性問題

1)丟失修改

2) 讀髒資料   

3)不可重複讀

      即每次讀取的結果可能不一致 

4)幻影讀

    舉個栗子:系統管理員A將資料庫中所有學生的成績從具體分數改為ABCDE等級,但是系統管理員B就在這個時候插入 

   了一條具體分數的記錄,當系統管理員A改結束後發現還有一條記錄沒有改過來,就好像發生了幻覺一樣,這就叫幻讀。

 

不可重複讀和幻影讀其實是本質一樣的!不可重複讀是針對單個數據!幻影讀是針對一個範圍內的資料 

 丟失修改

T1 和 T2 兩個事務都對一個數據進行修改,T1 先修改,T2 隨後修改,T2 的修改覆蓋了 T1 的修改。

 

 

讀髒資料

T1 修改一個數據,T2 隨後讀取這個資料。如果 T1 撤銷了這次修改,那麼 T2 讀取的資料是髒資料。

 

 

不可重複讀

T2 讀取一個數據,T1 對該資料做了修改。如果 T2 再次讀取這個資料,此時讀取的結果和第一次讀取的結果不同。

 

 

幻影讀

T1 讀取某個範圍的資料,T2 在這個範圍內插入新的資料,T1 再次讀取這個範圍的資料,此時讀取的結果和和第一次讀取的結果不同。

 


產生併發不一致性問題主要原因是破壞了事務的隔離性,解決方法是通過併發控制來保證隔離性。併發控制可以通過封鎖來實現,但是封鎖操作需要使用者自己控制,相當複雜。資料庫管理系統提供了事務的隔離級別,讓使用者以一種更輕鬆的方式處理併發一致性問題。