面試筆記摘要 資料庫事務的四大特性和隔離級別

2021-10-07 13:20:16 字數 1802 閱讀 5162

在資料庫操作中,一項事務(transaction)是由一條或多條運算元據庫的 sql 語句組成的乙個不可分割的工作單元,這些操作要麼都完成,要麼都取消。接下來將圍繞事務的特性、併發問題以及隔離級別進行講解。

事務的定義很嚴格,它必須同時滿足四個特性,即原子性、一致性、隔離性和永續性,也就是人們俗稱的 acid 特性,具體如下。

1)原子性(atomic)

表示將事務中所進行的操作**成乙個不可分割的單元,即對事務所進行的資料修改等操作,要麼全部執行,要麼全都不執行。

2)一致性(consistency)

表示事務完成時,系統從乙個一致的狀態轉換到另乙個一致狀態。事務的一致性決定了乙個系統設計和實現的複雜度,也導致了事務的不同隔離級別。

3)隔離性(isolation)

指乙個事務的執行不能被其他事務干擾,即乙個事務內部的操作及使用的資料對併發的其他事務是隔離的,併發執行的各個事務之間不能互相干擾。

4)永續性(durability)

永續性也稱永久性(permanence),指乙個事務一旦提交,它對資料庫中的資料的改變就應該是永久性的。提交後的其他操作或故障不會對其有任何影響。

在實際應用中,資料庫中的資料是要被多個使用者共同訪問的,在多個使用者同時操作相同的資料時,可能就會出現一些事務的併發問題,具體如下。

1)髒讀

指乙個事務讀取到另乙個事務未提交的資料。

2)不可重複讀

指乙個事務對同一行資料重複讀取兩次,但得到的結果不同。

3)虛讀/幻讀

指乙個事務執行兩次查詢,但第二次查詢的結果包含了第一次查詢中未出現的資料。

4)丟失更新

指兩個事務同時更新一行資料,後提交(或撤銷)的事務將之前事務提交的資料覆蓋了。

丟失更新可分為兩類,分別是第一類丟失更新和第二類丟失更新:

為了避免上述事務併發問題的出現,在標準的 sql 規範中定義了四種事務隔離級別,不同的隔離級別對事務的處理有所不同。這四種事務的隔離級別如下。

1)read uncommitted(讀未提交)

乙個事務在執行過程中,既可以訪問其他事務未提交的新插入的資料,又可以訪問未提交的修改資料。如果乙個事務已經開始寫資料,則另外乙個事務不允許同時進行寫操作,但允許其他事務讀此行資料。此隔離級別可防止丟失更新

2)read committed(讀已提交)

乙個事務在執行過程中,既可以訪問其他事務成功提交的新插入的資料,又可以訪問成功修改的資料。讀取資料的事務允許其他事務繼續訪問該行資料,但是未提交的寫事務將會禁止其他事務訪問該行。此隔離級別可有效防止髒讀

3)repeatable read(可重複讀取)【預設】

乙個事務在執行過程中,可以訪問其他事務成功提交的新插入的資料,但不可以訪問成功修改的資料。讀取資料的事務將會禁止寫事務(但允許讀事務),寫事務則禁止任何其他事務。此隔離級別可有效防止不可重複讀和髒讀

4)serializable(可序列化)

提供嚴格的事務隔離。它要求事務序列化執行,事務只能乙個接著乙個地執行,不能併發執行。此隔離級別可有效防止髒讀、不可重複讀和幻讀。但這個級別可能導致大量的超時現象和鎖競爭,在實際應用中很少使用。

一般來說,事務的隔離級別越高,越能保證資料庫的完整性和一致性,但相對來說,隔離級別越高,對併發效能的影響也越大。

因此,通常將資料庫的隔離級別設定為read committed,它既能防止髒讀,又能有較好的併發效能。雖然這種隔離級別會導致不可重複讀、幻讀和第二類丟失更新這些併發問題,但可通過在應用程式中採用悲觀鎖和樂觀鎖加以控制。

資料庫事務四大特性

事務的 原子性 一致性 分離性 永續性 1 原子性 事務的原子性指的是,事務中包含的程式作為資料庫的邏輯工作單位,它所做的對資料修改操作要麼全部執行,要麼完全不執行。這種特性稱為原子性。事務的原子性要求,如果把乙個事務可看作是乙個程式,它要麼完整的被執行,要麼完全不執行。就是說事務的操縱序列或者完全...

資料庫事務四大特性

資料庫事務是指作為單個邏輯工作單元執行的一系列操作,這些操作要麼全做要麼全不做,是乙個不可分割的工作單位。資料庫事務的四大特性 簡稱acid 是 事務的原子性指的是,事務中包含的程式作為資料庫的邏輯工作單位,它所做的對資料修改操作要麼全部執行,要麼完全不執行。這種特性稱為原子性。例如銀行取款事務分為...

資料庫事務四大特性

事務的 原子性 一致性 分離性 永續性 1 原子性 事務的原子性指的是,事務中包含的程式作為資料庫的邏輯工作單位,它所做的對資料修改操作要麼全部執行,要麼完全不執行。這種特性稱為原子性。事務的原子性要求,如果把乙個事務可看作是乙個程式,它要麼完整的被執行,要麼完全不執行。就是說事務的操縱序列或者完全...