事務併發的問題

2021-07-02 00:44:29 字數 1496 閱讀 6825

**:

乙個資料庫可能擁有多個訪問客戶端,這些客戶端都可以併發方式訪問資料庫。資料庫中的相同資料可能同時被多個事務訪問,如果沒有採取必要的隔離措施,就會導致各種併發問題,破壞資料的完整性。這些問題可以歸結為5類,包括3類資料讀問題( 髒讀、 不可重複讀和 幻象讀)以及2類資料更新問題( 第一類丟失更新和 第二類丟失更新)。下面,我們分別通過例項講解引發問題的場景。 

a事務讀取b事務尚未提交的更改資料,並在這個資料的基礎上操作。如果恰巧b事務回滾,那麼a事務讀到的資料根本是不被承認的。來看取款事務和轉賬事務併發時引發的髒讀場景: 

在這個場景中,b希望取款500元而後又撤銷了動作,而a往相同的賬戶中轉賬100元,就因為a事務讀取了b事務尚未提交的資料,因而造成賬戶白白丟失了500元。在oracle資料庫中,不會發生髒讀的情況。 

不可重複讀是指

a事務讀取了b事務已經提交的更改資料。假設a在取款事務的過程中,b往該賬戶轉賬100元,a兩次讀取賬戶的餘額發生不一致: 

在同一事務中,t4時間點和t7時間點讀取賬戶存款餘額不一樣。 

a事務讀取b事務提交的新增資料,這時a事務將出現幻象讀的問題。幻象讀一般發生在計算統計資料的事務中,舉乙個例子,假設銀行系統在同乙個事務中,兩次統計存款賬戶的總金額,在兩次統計過程中,剛好新增了乙個存款賬戶,並存入100元,這時,兩次統計的總金額將不一致: 

如果新增資料剛好滿足事務的查詢條件,這個新資料就進入了事務的視野,因而產生了兩個統計不一致的情況。 

幻象讀和不可重複讀是兩個容易混淆的概念,前者是指讀到了其他已經提交事務的新增資料,而後者是指讀到了已經提交事務的更改資料(更改或刪除),為了避免這兩種情況,採取的對策是不同的,防止讀取到更改資料,只需要對操作的資料新增行級鎖,阻止操作中的資料發生變化,而防止讀取到新增資料,則往往需要新增表級鎖——將整個表鎖定,防止新增資料(oracle使用多版本資料的方式實現)。 

a事務撤銷時,把已經提交的b事務的更新資料覆蓋了。這種錯誤可能造成很嚴重的問題,通過下面的賬戶取款轉賬就可以看出來: 

a事務在撤銷時,「不小心」將b事務已經轉入賬戶的金額給抹去了。 

a事務覆蓋b事務已經提交的資料,造成b事務所做操作丟失: 

上面的例子裡由於支票轉賬事務覆蓋了取款事務對存款餘額所做的更新,導致銀行最後損失了100元,相反如果轉賬事務先提交,那麼使用者賬戶將損失100元。

事務 二 事務的併發問題

事務是併發操作的基本單位,保證事務acdi特性是事務處理的重要任務,而事務acdi特性遭到破壞的乙個直接原因就是是多個事務對資料庫 共享資源 的併發操作引起的,為了保證事務的隔離性與一致性。dbms必須對事物進行合理正確的排程。由於事物的併發操作可能導致事務之間進行交織操作,可能會出現資料不一致的問...

事務的併發問題

1 髒讀 事務a讀取了事務b更新的資料,然後b回滾操作,那麼a讀取到的資料是髒資料 2 不可重複讀 事務 a 多次讀取同一資料,事務 b 在事務a多次讀取的過程中,對資料作了更新並提交,導致事務a多次讀取同一資料時,結果 不一致。3 幻讀 系統管理員a將資料庫中所有學生的成績從具體分數改為abcde...

事務併發常見的問題

資料庫事務中談的最多的就是事務的隔離級別,事務併發還行中最常見的問題又有髒讀 幻讀 不可重複讀。指當乙個事務正在訪問資料,並且對資料進行了修改,而這種修改還沒有提交到資料庫中,這時,另外乙個事務也訪問這個資料,然後使用了這個資料。因為這個資料是還沒有提交的資料,那麼另外乙個事務讀到的這個資料是髒資料...