什么是數(shù)據(jù)庫并發(fā)操作
數(shù)據(jù)庫是一個共享資源,可以提供多個用戶使用。這些用戶程序可以一個一個地串行執(zhí)行,每個時刻只有一個用戶程序運行,執(zhí)行對數(shù)據(jù)庫的存取,其他用戶程序必須等到這個用戶程序結束以后方能對數(shù)據(jù)庫存取。但是如果一個用戶程序涉及大量數(shù)據(jù)的輸入/輸出交換,則數(shù)據(jù)庫系統(tǒng)的大部分時間處于閑置狀態(tài)。因此,為了充分利用數(shù)據(jù)庫資源,發(fā)揮數(shù)據(jù)庫共享資源的特點,應該允許多個用戶并行地存取數(shù)據(jù)庫。但這樣就會產生多個用戶程序并發(fā)存取同一數(shù)據(jù)的情況,若對并發(fā)操作不加控制就可能會存取和存儲不正確的數(shù)據(jù),破壞數(shù)據(jù)庫的一致性,所以數(shù)據(jù)庫管理系統(tǒng)必須提供并發(fā)控制機制。并發(fā)控制機制的好壞是衡量一個數(shù)據(jù)庫管理系統(tǒng)性能的重要標志之一。
數(shù)據(jù)庫并發(fā)操作帶來的問題
(1)丟失更新
當兩個或多個事物讀入同一數(shù)據(jù)并修改,會發(fā)生丟失更新問題,即后一個事物更新的結果被前一事務所做更新覆蓋 即當事務A和B同事進行時,事務A對數(shù)據(jù)已經改變但并未提交時B又對同一數(shù)據(jù)進行了修改(注意此時數(shù)據(jù)是A還未提交改變的數(shù)據(jù)),到時A做的數(shù)據(jù)改動丟失了
(2)不可重復讀
當兩個數(shù)據(jù)讀取某個數(shù)據(jù)后,另一事務執(zhí)行了對該數(shù)據(jù)的更新,當前一事務再次讀取該數(shù)據(jù)(希望與第一次讀取的是相同的值)時,得到的數(shù)據(jù)與前一次的不一樣,這是由于第一次讀取數(shù)據(jù)后,事務B對其做了修改,導致再次讀取數(shù)據(jù)時與第一次讀取的數(shù)據(jù)不想同
(3)讀‘臟數(shù)據(jù)’
當一個事務修改某個數(shù)據(jù)后,另一事務對該數(shù)據(jù)進行了讀取,由于某種原因前一事務撤銷了對改數(shù)據(jù)的修改,即將修改過的數(shù)據(jù)恢復原值,那么后一事務讀到的數(shù)據(jù)與數(shù)據(jù)可得不一致,稱之為讀臟數(shù)據(jù)
注意:還有一個叫“幽靈數(shù)據(jù)”? 幽靈數(shù)據(jù)與臟數(shù)據(jù)類似,不過幽靈數(shù)據(jù)是指事務提交之后讀到的數(shù)據(jù),但是在讀取之后又進行了對前一事務的恢復,而臟數(shù)據(jù)是指并未提交前讀取的數(shù)據(jù)