資料庫事務的併發控制學習講解

2021-12-30 10:07:38 字數 1192 閱讀 4931

資料庫是共享資源,通常有許多個事務同時在執行。當多個事務併發地訪問資料庫時就會產生同時讀取和/或修改同一資料的情況。若對併發操作不加控制就可能會訪問和儲存不正確的資料,破壞資料庫的一致性。所以資料庫管理系統必須提供併發控制機制。

併發操作帶來的資料不一致性包括三類:丟失修改、不可重複讀和讀「髒』夕資料。 ( l )丟失修改(lost update ) 兩個事務 tl 和t2讀入同一資料並修改,t2提交的結果破壞了(覆蓋了) tl 提交的結果,導致 tl 的修改被丟失。 ( 2 )不可重複讀( non 一 repeatable read ) 不可重複讀是指事務 tl 讀取資料後,事務幾執行更新操作,使 tl 無法再現前一次讀取結果。( 3 )讀「髒」資料( dirty read ) 讀「髒』夕資料是指事務 tl 修改某一資料,並將其寫回磁碟,事務幾讀取同一資料後, tl 由於某種原因被撤銷,這時 tl 已修改過的資料恢復原值,幾讀到的資料就與資料庫中的資料不一致,則幾讀到的資料就為「髒」資料,即不正確的資料。避免不一致性的方法和技術就是併發控制。最常用的技術是封鎖技術。也可以用其他技術,例如在分布式資料庫系統中可以採用時間戳方法來進行併發控制。

封鎖就是事務 t 在對某個資料物件例如表、記錄等操作之前,先向系統發出請求,對其加鎖。加鎖後事務 t 就對該資料物件有了一定的控制,在事務 t 釋放它的鎖之前,其他的事務不能更新此資料物件。封鎖是實現併發控制的乙個非常重要的技術。

基本的封鎖型別有兩種:排它鎖( exclusive locks ,簡稱 x 鎖)和共享鎖 ( share locks,簡稱 s 鎖)。排它鎖又稱為寫鎖。若事務 t 對資料物件 a 加上 x 鎖,則只允許 t 讀取和修改 a ,其他任何事務都不能再對 a 加任何型別的鎖,直到 t 釋放 a 上的鎖。這就保證了其他事務在 t 釋放 a 上的鎖之前不能再讀取和修改 a 。共享鎖又稱為讀鎖。若事務 t 對資料物件 a 加上 s 鎖,則事務 t 可以讀 a但不能修改 a ,其他事務只能再對 a 加 s 鎖,而不能加 x 鎖,直到 t 釋放 a 上的 s 鎖。這就保證了其他事務可以讀 a ,但在 t 釋放 a 上的 s 鎖之前不能對 a 做任何修改。

dbms 在對資料進行讀、寫操作之前首先對該資料執行封鎖操作,例如下圖中事務 tl 在對 a 進行修改之前先對 a 執行 xock ( a ) ,即對 a 加 x 鎖。這樣,當幾請求對 a 加 x 鎖時就被拒絕,幾只能等待 tl 釋放 a 上的鎖後才能獲得對 a 的 x 鎖,這時它讀到的 a 是 tl 更新後的值,再按此新的 a 值進行運算。這樣就不會丟失 tl 的更新。

資料庫的事務控制和併發控制

資料庫的事務控制和併發控制 1.事務控制 事務是併發控制的基本單位,也是恢復的基本單位。在sql中支援事務的概念。所謂事務,是使用者定義的乙個操作序列 集合 這些操作要麼都做,要麼乙個都 不做,是乙個不可分割的整體。乙個事務通常以begin transaction開始,以commit或rollbac...

資料庫 事務 併發控制技術

事務指的是連續的對資料庫操作的集合,對於乙個事務中的所有的資料庫操作,要麼全部成功,要麼全部失敗。允許多個使用者同時使用的資料可系統為多使用者資料庫系統。多使用者資料庫系統的特點是 在同一時刻,併發執行的事務數量可以達到成千上萬個。多事務執行方式有三種 1 事務的序列執行 每個時刻只有乙個事務執行,...

資料庫併發事務

比如有乙個方法a,在a的內部有兩次同樣的select查詢,但是在兩次select之間方法b對資料庫進行了修改,那麼查詢到的a兩次查詢到的內容是否一致呢,這其實就是資料庫的 不可重複讀 幻讀 問題 這裡用spring hibernate mysql實驗,如果方法a不在事務環境下執行,那麼查詢到的兩次結...