髒讀,不可重複度,幻讀

2021-09-01 18:30:44 字數 971 閱讀 4517

事物a讀取事物b尚未提交的資料,此時事物b發生回滾,那麼事物a讀到的資料就是髒資料,俗稱髒讀

這類情況長發生在轉賬和取款操作中:                       

事物a在執行讀取操作,由於事物a比較大,前後讀取同一條資料需要經歷很長的時間 。而在事務a第一次讀取資料,比如此時讀取了小明的年齡為20歲,事務b執行更改操作,將小明的年齡更改為30歲,此時事務a第二次讀取到小明的年齡時,發現其年齡是30歲,和之前的資料不一樣了,也就是資料不重複了,系統不可以讀取到重複的資料,成為不可重複讀。                      

事務a在執行讀取操作,需要兩次統計資料的總量,第一次查詢資料總量後,此時事務b執行了新增資料的操作並提交後,這個時候事務a讀取的資料總量和之前統計的不一樣,就像產生了幻覺一樣,平白無故的多了幾條資料,成為幻讀。                  

(1) 不可重複讀是讀取了其他事物更改的資料,針對update操作

解決:使用行級鎖,鎖定該行,事物a多次讀取操作完成後才釋放該鎖,這個時候才允許其他事物更改剛才的資料

(2)幻讀是讀取了其他事物新增的資料,針對insert操作

解決:使用表級鎖,鎖定整張表,事物a多次讀取資料總量之後才釋放該鎖,這個時候才允許其他事物新增資料

髒讀,不可重複讀,幻讀

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

髒讀 不可重複讀 幻讀

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

髒讀 不可重複讀 幻讀

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