1. 程式人生 > 資料庫 >資料庫系統原理

資料庫系統原理

目錄

1 事務

1.1 概念

事務是邏輯上的一組操作,要麼都執行,要麼都不執行。

1.2 特性ACID

1 原子性(Atomicity)

  1. 事務被視為不可分割的最小單元,事務的所有操作要麼全部提交成功,要麼全部失敗回滾;
  2. 回滾可以用日誌來實現,日誌記錄著事務所執行的修改操作,在回滾時反向執行這些修改操作即可;

2 一致性(Consistency)

  1. 資料庫在事務執行前後都保持一致性狀態;
  2. 在一致性狀態下,所有事務對一個數據的讀取結果都是相同的;

3 隔離性(Isolation)

一個事務所做的修改在最終提交以前,對其它事務是不可見的。

4 永續性(Durability)

  1. 一旦事務提交,則其所做的修改將永遠儲存在資料庫中,即使系統發生崩潰,事務執行的結果也不能丟失;
  2. 可以通過資料庫備份和恢復來實現,在系統發生崩潰時,使用備份的資料庫進行資料恢復;

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)避免避免避免避免