在資料庫操作中,一項事務(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,即讀已提交資料,它既能防止髒讀,又能有較好的併發效能。雖然這種隔離級別會導致不可重複讀、幻讀和第二類丟失更新這些併發問題,但可通過在應用程式中採用悲觀鎖和樂觀鎖加以控制。
事務的四大特性和隔離級別
事務,其定義是應用程式中一系列不可分割的操作,就是一組可以完成某個業務的 集合,在關聯式資料庫中,事務可以是一條sql語句,或者一組sql語句,亦或整個程式。其中事務有四個特徵,必須同時滿足這四個特徵才是乙個完整的事務。即事務的acid特性 原子性 atomicity 即事務是資料庫的不可分割單元,...
事務的四大特性和隔離級別
事務又分為本地事務和分布式事務 本地事務也稱為資料庫事務或傳統事務 相對於分布式事務而言 它的執行模式就是常見的 transaction begin insert delete update insert delete update transaction commit rollback 本地事務有...
事務的四大特性和隔離級別
1.事務的四大特性 acid 指資料庫事務正確執行的四個基本要素的縮寫。包含 原子性 atomicity 一致性 consistency 隔離性 isolation 永續性 durability 乙個支援事務 transaction 的資料庫,必需要具有這四種特性,否則在事務過程 transacti...