1.髒讀
A事務讀取到B事務尚未提交的更改數據,並在這個數據的基礎上進行操作。如果恰巧B事務回滾,那麼A事務讀到的數據根本是不被承認的。
時間 | 轉賬事務A | 轉賬事務B |
---|---|---|
T1 | 開始事務 | |
T2 | 開始事務 | |
T3 | 查詢賬戶餘額爲1000 | |
T4 | 取出500,餘額改爲500 | |
T5 | 查詢賬戶餘額爲500 | |
T6 | 撤銷事務,餘額恢復1000 | |
T7 | 匯入100,把餘額改爲600 | |
T8 | 提交事務 |
2.不可重複讀
不可重複讀是指A事務讀取了B事務已經提交的更改數據。假設A在取款事務過程中,B往賬戶轉了100元,A兩次讀取賬戶的餘額發生不一致。
時間 | 取款事務A | 轉賬事務B |
---|---|---|
T1 | 開始事務 | |
T2 | 開始事務 | |
T3 | 查詢賬戶餘額爲1000 | |
T4 | 查詢賬戶餘額爲1000 | |
T5 | 取出100,把餘額改爲900 | |
T6 | 提交事務 | |
T7 | 查詢賬戶餘額爲900(和T4查詢的不一致) |
3.幻想讀
A事務讀取到B事務提交的新增數據,這時A事務將出現幻想讀的問題。幻想讀一般發生在計算統計數據的事務中。
時間 | 統計金額事務A | 轉賬事務B |
---|---|---|
T1 | 開始事務 | |
T2 | 開始事務 | |
T3 | 統計總存款數爲1000 | |
T4 | 新增一個存款賬戶,存入100 | |
T5 | 提交事務 | |
T6 | 統計總存款數爲1100 |
4.第一類丟失更新
A事務撤銷時,把已經提交的B事務的更新數據覆蓋了。
時間 | 取款事務A | 轉賬事務B |
---|---|---|
T1 | 開始事務 | |
T2 | 開始事務 | |
T3 | 查詢賬戶餘額爲1000 | |
T4 | 查詢賬戶餘額爲1000 | |
T5 | 匯入100,把餘額改爲1100 | |
T6 | 提交事務 | |
T7 | 取出100,把餘額改爲900 | |
T8 | 撤銷事務 | |
T9 | 餘額恢復爲1000 |
5.第二類丟失更新
A事務覆蓋B事務已經提交的數據,造成B事務所做的操作丟失。
時間 | 轉賬事務A | 取款事務B |
---|---|---|
T1 | 開始事務 | |
T2 | 開始事務 | |
T3 | 查詢賬戶餘額爲1000 | |
T4 | 查詢賬戶餘額爲1000 | |
T5 | 取出100,把餘額改爲900 | |
T6 | 提交事務 | |
T7 | 匯入100 | |
T8 | 提交事務 | |
T9 | 把餘額改爲1100 |