初識髒讀 不可重複讀 幻讀

2021-08-20 20:24:39 字數 1324 閱讀 7709

i .髒讀:乙個事務讀到另乙個事務未提交的資料,導致多次查詢的結果不一致;

以轉賬為例 ,mysql資料庫的預設隔離級別為 repeatable read,此隔離級別可以避免髒讀和不可重複讀,為了演示產生髒讀,

開啟兩個a、b兩個視窗,進行a事務和b事務。

1.在a 視窗中將隔離級別設定為 red uncommited ,  b視窗不變,預設為repeatable read;

2.假設張三有 100塊   李四也有100塊,同時在a、b視窗中開啟事務,在b視窗中進行轉賬事務,張三轉給李四50塊,在b事務提交前,張三通知李四查賬,此時李四在a事務中查到的結果是150;此時b事務未提交,卻已經在另乙個a事務中讀到了資料,如在b事務提交前發生了異常,b事務進行了回滾(roolback),李四再去查,發現咋變成100了,兩次(多次)查詢的結果不一致,就這樣產生了髒讀大致過程如下圖

ii不可重複讀:乙個事務讀到另乙個事務已提交的 update(主要是修改)的資料,導致多次查詢的結果不一致

同樣以轉賬為例 ,為了演示產生產生不可重複讀

開啟兩個a、b兩個視窗,進行a事務和b事務。

1.在a 視窗中將隔離級別設定為 red commited ,  b視窗不變,預設為repeatable read;

2.假設張三有 100塊   李四也有100塊,同時在a、b視窗中開啟事務,在b視窗中進行轉賬事務,張三轉給李四50塊,在b事務提交前,張三通知李四查賬,此時李四在a事務中查到的結果是100,沒收到錢;此時b事務未提交,a事務中沒有讀到b事務未提交的資料,避免了髒讀。然後提交事務,李四再去查,發現變成150了,讀到了另乙個事務已提交的資料兩次(多次)查詢的結果不一致,就這樣產生了不可重複讀讀大致過程如下圖

iii 幻讀:乙個事務讀到另乙個事務已提交的 insert into(新增到資料庫)的資料,導致多次查詢的結果不一致

~~~以上為個人理解,不妥之處,希望得到指正

髒讀,不可重複讀,幻讀

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

髒讀 不可重複讀 幻讀

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

髒讀 不可重複讀 幻讀

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