數據庫事物併發有可能出現的問題

之前對數據庫事物的很多知識都很零散,今天有時間整理整理這些知識。

1.第一類丟失更新

情況

第一個事物更新某條記錄,第二個事物也更新同一條記錄,第一個事物正常提交了,但是第二個事物卻回滾了,造成第一個事物更新失效

 舉例

我的銀行賬號有1000元,我某天去銀行想給我的賬號存500元,我女朋友也想給我的賬號存100元

我和我女朋友都是同時(併發事物)開始辦理業務的,這時候我的500元成功存入了,賬戶餘額變成了1500元,我很開心

但是,我女朋友在存錢的過程中突然後悔了,她不想存了,拿着她的100元走了,於是銀行櫃檯給將我的賬戶餘額回滾到之前的餘額1000元 ! ! !

2.髒讀

情況

第二個事物讀取到第一個事物未提交的更新數據,然後第二個事物繼續依據這個結果進行業務操作,但是第一個事物卻將數據進行了回滾

 舉例

我的銀行賬號有1000元,我某天去銀行想給我的賬號存990元,我女朋友想給我湊個整數,她準備再給我存10元

我和我女朋友都是同時開始辦理業務的,開始的時候我存入了990元,賬號餘額變成了1990元,我的女朋友看到我的賬號餘額變1990元了,然後給我湊整存入了10元,但是我突然覺得銀行利息太低了,將我的交易進行了回滾,拿走了我存入的990元,但是我女朋友辦理完業務後,賬戶餘額變爲了2000元,這樣銀行就損失了990元。

3.幻讀

情況

一個事物讀取到了另一個事物新插入的數據(多次讀取總記錄)

 舉例

我這個月花了10000元,我女朋友覺得花的有些多,她打算查查我的銀行流水記錄,看看有沒有大額轉賬,但是我不知道她在查我的帳,我繼續花着卡里的錢

她第一次查詢我的詳細賬單時,發現有1000比交易,沒有大額轉賬記錄,她放心了,但是又怕自己沒看仔細,又準備看一遍賬單,但是與此同時我又新產生了一筆消費(插入了一條記錄),這時候發現有1001比交易了,她開始懷疑自己眼花了,第一次1000比交易,第二次1001交易,這就是出現了幻讀

4.不可重複讀

情況

一個事物讀取到了另一個事物已提交的記錄(多次讀取同一條記錄)

 舉例

我準備去銀行存100元,我女朋友在查詢我的賬號餘額,她第一查詢發現賬號中有2000元,當我存完後,她再次查詢餘額變成了2100元,這就是不可重複讀

5.第二類丟失更新

情況

多個事物基於最初的查詢結果更新同一條記錄

 舉例

我的賬戶有2100元,我和我女朋友去銀行同時辦理業務,我準備存入500元,她準備取出600元

但是我們是同時開始辦理業務的,如果我先辦理完業務那麼我的賬戶餘額變爲2100+600元

她再辦理完業務餘額變爲2100-600元,最後餘額變爲1500元,我的錢變少了,我存錢的更新記錄丟失了

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章