一、概述
數據庫是一個共享資源,可以供給多個用戶使用。運行多個用戶同時使用一個數據庫的數據系統統稱多用戶數據庫系統。例如,飛機訂票數據庫系統。在這樣的一個系統中,在同一時刻并發運行的事務數可達數百上千個。
當多個用戶并發地存取數據庫時就會產生多個事務同時存取同一數據的情況。若對數據操作不加控制就有可能存取和存儲不正確的數據,破壞事務的一致性和數據庫的一致性。
事務是并發控制的基本單位,保證事務的ACID特性是事務處理的重要任務,而事務的ACID特性可能遭到破壞的原因之一是多個事務對數據庫的并發操作造成的。
二、數據庫并發存在的問題
- 臟讀
讀臟數據是指事務T1修改某一數據并將其寫回磁盤,事務T2讀取同一數據后,T1被撤銷,T1修改過的值回復原值,T2讀過的數據就會與數據庫中的數據不一致。
- 丟失修改
T1與T2讀入同一數據并修改,T2提交的結果破壞T1提交的結果。
- 不可重復讀
事務T1讀取數據后,事務T2執行更新操作,使得T1無法再現前一次讀取的結果。
-
三、并發控制技術
-
封鎖
所謂封鎖,就是事務T在對某個數據對象,例如表、記錄操作之前,先向系統發出請求,對其加鎖。加鎖后事務T就對該數據對象有了一定的控制,在事務T釋放它的鎖之前,其他事務不能更新此數據對象。
封鎖類型