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