1. 程式人生 > >資料庫中的併發操作帶來的一系列問題

資料庫中的併發操作帶來的一系列問題

資料庫中常見的併發操作所帶來了一致性問題包括:丟失的修改,不可重複讀,讀“髒”資料,幻讀。

1.丟失的修改:一個事物的更新覆蓋了另一個事物的更新。例如:事物A和B讀入同一資料並修改,B提交的結果破壞了A提交的結果,導致A的修改被丟失。

2.不可重複讀:一個事物兩次讀取同一個資料,兩次讀取的資料不一致。不可重複讀是指事物A讀取資料後,事物B執行更新操作,事務A 無法再現前一次讀取結果。

a.事物A讀取某一資料後,事物B對其作了修改,當事物A再次讀取資料時,得到與前一次不同的值。

b.事物A按一定的條件從資料庫中讀取了某些資料後,事物B刪除了其中部分記錄,當A再次以相同條件讀取時,發現某些記錄消失了。


3.髒讀:一個事物讀取了另一個事物未提交的資料。讀“髒”資料是指事物A修改某一資料,並將其寫回磁碟,事物B讀取同一資料後,A由於某種原因被撤銷,這時A已修改過的資料恢復原值,B讀到的資料就與資料庫中的資料不一致,則B讀到的資料為“髒”資料,即不正確的資料。

4.幻讀:一個事務按相同的查詢條件重新讀取以前檢索過的資料,卻發現其他事務插入了滿足其查詢條件的新資料,這種現象就稱為“幻讀”。

a.事物A按一定的條件從資料庫中讀取某些資料記錄後,事物B插入了一些記錄,當B再次按照相同條件讀取資料時,發現多了一些記錄。(也叫做幻影讀)。


產生上述三類資料不一致性的主要原因是併發操作破壞了事物的隔離性,併發控制就是要用正確的方式排程併發操作,使一個事物的執行不受其他事物的干擾,從而避免造成資料的不一致性。