事務中的髒寫、髒讀、不可重複讀、幻讀

事務中的髒寫、髒讀、不可重複讀、幻讀

首先來說一下事務中會發生的問題:髒寫、髒讀、不可重複讀、幻讀

假設id=5的記錄最原始的username=“小王”

1.髒寫

sessionA sessionB
begin //開啓事務
begin//開啓事務
update user set username=“張三” where id=5;
commit//提交事務
update user set username=“李四” where id=5;
ROllBACK;

1.sessionA開啓了事務之後,緊接着sessionB也開啓了事務,那麼sessionB如果事務回滾就會回滾到最原始的記錄,也就是sessionB開啓事務之前的記錄,也就是username爲"小王"。

2.sessionA明明對id爲5的記錄進行了修改,而且sessionB也沒有進行事務提交,只是進行了事務的回滾,這種情況就稱爲髒寫。更改了別人修改的記錄

2.髒讀

sessionA sessionB
begin //開啓事務
begin//開啓事務
update user set username=“張三” where id=5;
select * from user where id =5;
COMMIT;//提交事務
COMMIT;//提交事務

sessionB會讀取到username爲張三的記錄,這種情況就是髒讀。

3.不可重複讀

sessionA sessionB
begin //開啓事務
select * from user where id =5; //讀取到的是小王
update user set username=“張三” where id=5;//這裏有個隱式事務。自動提交
select * from user where id =5; //讀取到的是張三
commit;

上面這種情況就是不可重複情況,在一個開啓的事務中,同一個select語句能讀取到的其他事務修改的值。

4.幻讀

sessionA sessionB
begin //開啓事務
select * from user where id >=5;
insert into user(id,username) values(6,‘老李’);//隱式事務,自動提交
select * from user where id >=5; 此時讀取到的就是除了之前有的 還多了一條老李的記錄
commit;

幻讀就是相比第一條查詢,第二條查詢多了其他數據

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