資料庫系統原理
阿新 • • 發佈:2020-12-27
目錄
1 事務
1.1 概念
事務是邏輯上的一組操作,要麼都執行,要麼都不執行。
1.2 特性ACID
1 原子性(Atomicity)
- 事務被視為不可分割的最小單元,事務的所有操作要麼全部提交成功,要麼全部失敗回滾;
- 回滾可以用日誌來實現,日誌記錄著事務所執行的修改操作,在回滾時反向執行這些修改操作即可;
2 一致性(Consistency)
- 資料庫在事務執行前後都保持一致性狀態;
- 在一致性狀態下,所有事務對一個數據的讀取結果都是相同的;
3 隔離性(Isolation)
一個事務所做的修改在最終提交以前,對其它事務是不可見的。
4 永續性(Durability)
- 一旦事務提交,則其所做的修改將永遠儲存在資料庫中,即使系統發生崩潰,事務執行的結果也不能丟失;
- 可以通過資料庫備份和恢復來實現,在系統發生崩潰時,使用備份的資料庫進行資料恢復;
2 併發一致性問題
在併發環境下,事務的隔離性很難保證,因此會出現很多併發一致性問題。
2.1 丟失修改
T1 和 T2 兩個事務都對一個數據進行修改,T1 先修改,T2 隨後修改,T2 的修改覆蓋了 T1 的修改。
2.2 髒讀
T1 修改一個數據,T2 隨後讀取這個資料。如果 T1 撤銷了這次修改,那麼 T2 讀取的資料是髒資料。
2.3 不可重複讀
T2 讀取一個數據,T1 對該資料做了修改。如果 T2 再次讀取這個資料,此時讀取的結果和第一次讀取的結果不同。
2.4 幻影讀
T1 讀取某個範圍的資料,T2 在這個範圍內插入新的資料,T1 再次讀取這個範圍的資料,此時讀取的結果和和第一次讀取的結果不同。
3 事務隔離級別
產生併發不一致性問題主要原因是破壞了事務的隔離性,解決方法是通過併發控制來保證隔離性。併發控制可以通過封鎖(加鎖)來實現,但是封鎖操作需要使用者自己控制,相當複雜。資料庫管理系統提供了事務的隔離級別,讓使用者以一種更輕鬆的方式處理併發一致性問題。
事務隔離級別如下:
隔離級別 | 說明 |
---|---|
未提交讀(READ UNCOMMITTED) | 事務中的修改,即使沒有提交,對其它事務也是可見的。 |
提交讀(READ COMMITED) | 一個事務只能讀取已經提交的事務所做的修改。 |
可重複讀(REPEATABLE READ) | 保證同一個事務中多次讀取同樣資料的結果是一樣的。 |
可序列化(SERIALIZABLE) | 強制事務序列執行。 |
事務併發訪問引起的問題及使用哪種事務隔離級別避免:
併發訪問問題 | 事務隔離級別 |
---|---|
丟失修改 | 所有事務隔離級別均可避免 |
髒讀 | READ COMMITED事務隔離級別以上可避免 |
不可重複讀 | REPEATABLE READ事務隔離級別以上可避免 |
幻讀 | SERIALIZABLE事務隔離級別以上可避免 |
即:
事務隔離級別\併發問題 | 丟失修改 | 髒讀 | 不可重複讀 | 幻讀 |
---|---|---|---|---|
未提交讀(READ UNCOMMITTED) | 避免 | 發生 | 發生 | 發生 |
提交讀(READ COMMITED) | 避免 | 避免 | 發生 | 發生 |
可重複讀(REPEATABLE READ) | 避免 | 避免 | 避免 | 發生 |
可序列化(SERIALIZABLE) | 避免 | 避免 | 避免 | 避免 |