髒讀,幻讀和不可重複讀

2022-06-21 03:18:12 字數 760 閱讀 5908

當乙個事務a正在訪問資料,並修改了資料,還沒提交到資料庫中。此時,另乙個事務b也訪問了這個資料,然後使用這個資料。

e.g.

1.mary的原工資為1000, 財務人員將mary的工資改為了8000(但未提交事務)

2.mary讀取自己的工資 ,發現自己的工資變為了8000,歡天喜地!

3.而財務發現操作有誤,回滾了事務,mary的工資又變為了1000

像這樣,mary記取的工資數8000是乙個髒資料。

當兩個使用者同時修改同乙個資料表時,當乙個使用者a修改了一些項,另乙個使用者b新增了一些項。a再次查詢時,發現多了一些項。

e.g.

目前工資為1000的員工有10人。

1.事務1,讀取所有工資為1000的員工。

2.這時事務2向employee表插入了一條員工記錄,工資也為1000

3.事務1再次讀取所有工資為1000的員工 共讀取到了11條記錄,

解決辦法:如果在操作事務完成資料處理之前,任何其他事務都不可以新增新資料,則可避免該問題

乙個事務a內,多次讀取同乙個資料,a還沒有結束。另乙個事務b修改了資料,事務a前後讀取相同的資料,結果不同。

e.g.

1.在事務1中,mary 讀取了自己的工資為1000,操作並沒有完成

2.在事務2中,這時財務人員修改了mary的工資為2000,並提交了事務.

3.在事務1中,mary 再次讀取自己的工資時,工資變為了2000

解決辦法:如果只有在修改事務完全提交之後才可以讀取資料,則可以避免該問題。

髒讀,不可重複讀,幻讀

髒讀,不可重複讀,幻讀是由於資料庫事務的隔離性導致的問題。髒讀 乙個事務讀取到了其它未提交事務操作的記錄。不可重複讀 乙個事務a內,首次查詢到一條相同記錄,然後事務b修改該條記錄並提交,事務a再次執行相同查詢,得到了事務b更新後的結果,事務a兩次相同的查詢,卻得到了不同的結果,這個叫做不可重複讀。是...

髒讀 不可重複讀 幻讀

髒讀 事務a使用了資料,但是還沒來得及提交,事務b就使用了這個資料,對於事務b來說就是髒讀。允許髒讀 sql server select from category with nolock 不可重複讀 事務a在9點和12點都會操作乙份資料,但是在10點的時候,事務b也操作了該份資料,並且使其數值進行...

髒讀 不可重複讀 幻讀

總結 對於不可重複讀和幻讀的區別是 不可重複讀圈了一塊地,這塊地不允許任何人動用,但是不管旁邊的地方是否開闢了一塊地。幻讀是不僅是圈的地,而且附近也不允許有新的地。這個對於區間查詢會有影響。所以不可重複讀和幻讀最大的區別是區間查詢的結果會不會一樣。幻讀保證結果一樣,但是不可重複讀不保證。mysql的...