事務併發控制(一)

2021-09-09 06:33:21 字數 2529 閱讀 2478

1、事務的概念

事務是使用者定義的一組資料庫操作序列。

事務具有acid特性:原子性(atomicity)、一致性(consistency)、隔離性(isolation)和持續性(durability)。

原子性指:事務包含的所有操作要麼全部被執行,要麼都不執行;一致性指:事務的執行結果必須使資料庫從乙個一致性狀態轉換到另乙個一致性狀態,一致性狀態是指資料庫中的資料滿足完整性約束;隔離性是指:在事務被提交以前,其操作結果對於其他事務不可見;持續性指:一旦事務提交成功,其對資料庫中資料的改變是永久的,即使因資料庫故障而受到破壞,dbms也能恢復。

對於事務的一致性,有點不好理解。事務的一致性的另乙個定義如下:   

事務在系統完整性中實施一致性,如果事務成功地完成,那麼系統中所有變化將正確地應用,系統處於新有效狀態。如果在事務**現錯誤,那麼系統中的所有變化將自動地回滾,系統返回到原始狀態。事務的執行結果將使資料庫從乙個一致性狀態到另乙個一致性狀態。然而,事務併發會導致資料庫狀態的不一致性,即使各個事務能保持狀態的正確性。保證併發執行的事務能保持資料庫一致性的整個過程成為併發控制。

2、事務併發所產生的問題

事務併發執行時,如果不對事務執行順序進行限制,造成資料庫處於不一致的狀態。多個事務併發執行時,資料的不一致性主要表現為:資料更新丟失、「髒「讀和不一致讀。

2.1 資料更新丟失

指兩個或者多個事務併發執行時,都對同一資料進行更新操作(即先讀後改,再寫入),從而導致後面的更新覆蓋前面的更新。例如,兩個事務t1和t2同時讀入同一資料並修改,t2的提交覆蓋了t1的提交結果,導致t1的修改丟失(此時,沒有對t1,t2的執行順序做控制)。由於這種情況是事務寫造成的,因此也被叫做寫-寫衝突(write-write衝突)。

另外更新丟失也被分為兩類:

第一類更新丟失(回滾丟失 ) :

當2個事務更新相同的資料來源,如果第乙個事務被提交,而另外乙個事務卻被撤銷,那麼會連同第乙個事務所做的跟新也被撤銷。也就是說第乙個事務做的跟新丟失了。

第二類更新丟失(覆蓋丟失):

第二類更新丟失是在實際應用中經常遇到的併發問題,它和不可重複讀本質上是同一類併發問題,通常它被看做不可重複讀的特例:當2個或者多個事務查詢同樣的記錄然後各自基於最初的查詢結果更新該行時,會造成第二類丟失更新。因為每個事務都不知道其他事務的存在,最後乙個事務對記錄做的修改將覆蓋其他事務對該記錄做的已提交的修改

2.2 讀「髒」資料

讀「髒」資料是由於乙個事務正在讀另乙個更新事務尚未提交的資料引起的。這種不一致的情況又被成為讀-寫衝突(read-write衝突)。例如,事務t1修改了某資料,事務t2在t1未提交之前讀取同一資料後,t1由於某種原因被撤銷,這時t1已修改過的資料恢復原值,t2讀到的資料就與資料庫中的資料不一致了,則稱t2讀到的資料為「髒」資料。如圖2.1所示。

圖2.1 髒讀示意圖

2.3 不一致讀

不一致讀,也叫做不可重複讀,分三種情況。

對於併發執行的兩個事務t1,t2,當事務t1讀取某一資料後,事務t2對該資料執行了更新操作,使得t1無法再次讀取該資料時,無法獲得跟前一次相同的結果。例如,t1讀取資料a後,t2修改了資料a,t1再次讀取資料a,卻得到不同的結果。

事務t1按一定條件讀取某些資料記錄後,事務t2插入了一些記錄,t1再次以相同條件讀取記錄時得到不同的結果集。

事務t1按照一定條件讀取某些記錄後,事務t2刪除了其中的一些記錄,t1再次以相同條件讀取記錄時得到不同的結果集。

第2、第3種情況又稱為「幻讀」,即事務前後兩次讀取按照同一條件讀取資料庫,卻得到不同的結果集,彷彿出現了幻覺一樣。不一致讀也是由讀-寫衝突引起的。

3、資料庫的四種隔離級別

iso標準定義了4個事務隔離等級,即

read-uncommitted, read-committed, repeatable-read, serializable.

1) read uncommitted(可以讀未提交的)

查詢可以讀取到其他事務正在修改的資料,即使其他事務的修改還沒有提交.這種隔離等級無法避免髒讀.

2) read committed(只可以讀已經提交的)

其他事務對資料庫的修改,只要已經提交,其修改的結果就是可見的,與這兩個事務開始的先後順序無關.這種隔離等級避免了髒讀,但是無法實現可重複讀,甚至有可能產生幻讀.

3) repeatable read(可重複讀)

該隔離級別要求事務只能讀取在它開始之前已經提交的事務對資料庫的修改,在它開始以後,所有其他事務對資料庫的修改對它來說均不可見.從而實現了可重複讀,但是仍有可能幻讀。該隔離界別下,事務會鎖定查詢中使用的所有資料以防止其他使用者更新,但其他使用者可以將新的幻像行插入資料集,且幻想行包括在當前事務後續讀取中。

4) serializable(可序列化)

這是事務隔離等級的最高端別.其實現原理就是對於所有的query,即使是查詢,也會加上讀鎖,避免其他事務對資料的修改.所以它成功的避免了幻讀.但是代價是,資料庫系統的併發處理能力大大降低,所以它不會被用到生產系統中。

事務併發 併發控制(加鎖)

事務處理中的併發控制 1.併發操作 資料庫是乙個共享資源,允許多個使用者程式並行地訪問資料庫,所以當多個使用者併發地訪問同一資料,就可能出現資料的不一致性。例如 假設有兩個事務 t1 和 t2 它們都需要讀出並修改資料 a 其執 況如下所示 執行順序 1 2 3 4 5 6 事務t1 讀aa a 1...

事務的併發控制

我們知道,當多個執行緒都開啟事務運算元據庫中的資料時,資料庫系統要能進行隔離操作以保證各個執行緒獲取資料的準確性。也就是說,事務的隔離性主要用於解決事務的併發安全問題 事務隔離級別 髒讀不可重複讀 幻讀讀未提交 read uncommitted 是是 是不可重複讀 read committed 否是...

事務和併發控制

事務就是使用者定義的乙個資料庫操作序列,這些操作要麼全做,要麼全不做,是乙個不可分割的工作單位。事物的acid特性 事務具有原子性,一致性,隔離性和永續性 原子性 表示事務中的操作是乙個原子操作,要麼全做,要麼全不做 一致性 表示資料庫必須從乙個一致狀態轉移到另乙個一致狀態,一致性是與原子性密切相關...