資料庫事務併發有關問題

2021-07-04 19:06:25 字數 959 閱讀 2241

多個事務同時訪問資料庫時候,會發生下列5類問題,包括3類資料讀問題(髒讀,不可重複讀,幻讀),2類資料更新問題(第一類丟失更新,第二類丟失更新):

1,髒讀(dirty read)

a事務讀取b事務尚未提交的更改資料,並在這個資料基礎上操作。如果b事務回滾,那麼a事務讀到的資料根本不是合法的,稱為髒讀。在oracle中,由於有version控制,不會出現髒讀。

2,不可重複讀(unrepeatable read)

a事務讀取了b事務已經提交的更改(或刪除)資料。比如a事務第一次讀取資料,然後b事務更改該資料並提交,a事務再次讀取資料,兩次讀取的資料不一樣。

3,幻讀(phantom read)

a事務讀取了b事務已經提交的新增資料。注意和不可重複讀的區別,這裡是新增,不可重複讀是更改(或刪除)。這兩種情況對策是不一樣的,對於不可重複讀,只需要採取行級鎖防止該記錄資料被更改或刪除,然而對於幻讀必須加表級鎖,防止在這個表中新增一條資料。

4,第一類丟失更新

a事務撤銷時,把已提交的b事務的資料覆蓋掉。這種錯誤會造成非常嚴重的後果。

5,第二類丟失更新

a事務提交時,把已提交的b事務的資料覆蓋掉。這種錯誤會造成非常嚴重的後果。

資料庫通過鎖機制解決資料併發問題。

ansi sql 92標準定義了4個等級的事務隔離級別:

read uncommitted、read committed、repeatable read、serializable,具體介紹如下:

read uncommitted 會出現髒讀、不可重複讀、幻讀 ( 隔離級別最低,併發效能高 ) 

read committed  會出現不可重複讀、幻讀問題(鎖定正在讀取的行) 

repeatable read會出幻讀(鎖定所讀取的所有行) 

serializable 保證所有的情況不會發生(鎖表)  

sql 92 推薦使用repeatable read 保證資料的讀一致性。

資料庫事務併發有關問題

多個事務同時訪問資料庫時候,會發生下列5類問題,包括3類資料讀問題 髒讀,不可重複讀,幻讀 2類資料更新問題 第一類丟失更新,第二類丟失更新 1,髒讀 dirty read a事務讀取b事務尚未提交的更改資料,並在這個資料基礎上操作。如果b事務回滾,那麼a事務讀到的資料根本不是合法的,稱為髒讀。在o...

資料庫事物併發有可能出現的問題

之前對資料庫事物的很多知識都很零散,今天有時間整理整理這些知識。第乙個事物更新某條記錄,第二個事物也更新同一條記錄,第乙個事物正常提交了,但是第二個事物卻回滾了,造成第乙個事物更新失效 我的銀行賬號有1000元,我某天去銀行想給我的賬號存500元,我女朋友也想給我的賬號存100元 我和我女朋友都是同...

資料庫事務併發問題

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