資料庫事務的ACID特性和隔離級別

2021-07-30 15:59:38 字數 1206 閱讀 3035

資料庫事務(transaction)是指作為單個邏輯工作單元執行的一系列操作,要麼完全地執行,要麼完全地不執行。一方面,當多個應用程式併發訪問資料庫時,事務可以在應用程式間提供乙個隔離方法,防止互相干擾。另一方面,事務為資料庫操作序列提供了乙個從失敗恢復正常的方法。

事務具有四個特性:原子性(atomicity)、一致性(consistency)、隔離型(isolation)、永續性(durability),簡稱acid。

事務的原子性是指事務中的操作不可拆分,只允許全部執行或者全部不執行。

事務的一致性是指事務的執行不能破壞資料庫的一致性,一致性也稱為完整性。乙個事務在執行後,資料庫必須從乙個一致性狀態轉變為另乙個一致性狀態。

事務的隔離型是指併發的事務相互隔離,不能互相干擾。

事務的永續性是指事務一旦提交,對資料的狀態變更應該被永久儲存。

實際工作中事務幾乎都是併發的,完全做到互相之間不干擾會嚴重犧牲效能,為了平衡隔離型和效能,sql92規範定義了四個事務隔離級別:讀未提交(read uncommitted)、讀已提交(read committed)、可重複讀(repeatable read)、序列化(serializable)。四個級別逐漸增強,每個級別解決上個級別的乙個問題。

另乙個事務修改了資料,但尚未提交,而本事務中的select會讀到這些未被提交的資料(髒讀)。

髒讀是指另乙個事務修改了資料,但尚未提交,而本事務中的select會讀到這些未被提交的資料。

本事務讀取到的是最新的資料(其他事務提交後的)。問題是,在同乙個事務裡,前後兩次相同的select會讀到不同的結果(不可重複讀)。

不可重複讀是指同乙個事務執行過程中,另外乙個事務提交了新資料,因此本事務先後兩次讀到的資料結果會不一致。

在同乙個事務裡,select的結果是事務開始時間點的狀態,同樣的select操作讀到的結果會是一致的。但是,會有幻讀現象。

不可重複讀保證了同乙個事務裡,查詢的結果都是事務開始時的狀態(一致性)。但是,如果另乙個事務同時提交了新資料,本事務再更新時,就會發現了這些新資料,貌似之前讀到的資料是幻覺,這就是幻讀。

所有事務只能乙個接乙個序列執行,不能併發。

事務隔離級別越高,越能保證資料的一致性,但對併發效能影響越大,一致性和高效能必須有所取捨或折中。

一般情況下,多數應用程式可以選擇將資料庫的隔離級別設定為讀已提交,這樣可以避免髒讀,也可以得到不錯的併發效能。儘管這個隔離級別會導致不可重複度、幻讀,但這種個別場合應用程式可以通過主動加鎖進行併發控制。

資料庫事務ACID特性及隔離級別

資料庫acid特性介紹 1 原子性 atomic 乙個事務被視為乙個不可分割的最小工作單元,這個事務裡的所有操作要麼全部成功執行,要麼全都不執行,不能只執行其中的一部分操作。實現事務的原子性,要支援回滾操作,在某個操作失敗後,回滾到事務執行之前的狀態。回滾是乙個抽象概念,大多數資料庫在實現事務時是在...

資料庫事務ACID特性

資料庫管理系統中事務 transaction 的四個特性 分析時根據首字母縮寫依次解釋 原子性 atomicity 一致性 consistency 隔離性 isolation 永續性 durability 所謂事務,它是乙個操作序列,這些操作要麼都執行,要麼都不執行,它是乙個不可分割的工作單位。執行...

資料庫 事務的特性ACID

事務 transaction 是併發控制的基本單位。所謂事務,它是乙個操作序列,這些操作要麼都執行,要麼都不執行,它是乙個不可分割的工作單位。例如,銀行轉帳工作 從乙個帳號扣款並使另乙個帳號增款,這兩個操作要麼都執行,要麼都不執行。資料庫事務必須具備acid特性,acid是atomic 原子性 co...