演示不同隔離級別下的併發問題

2021-06-21 22:01:02 字數 1610 閱讀 7730

演示不同隔離級別下的併發問題

1,當把事務的隔離級別設定為read uncommitted時,會引發髒讀,不可重複讀和虛讀

a視窗set transaction isolation level read uncommitted;

start transaction;

select * from account;

-----發現a賬戶是1000元,轉到b視窗

select * from account

-----發現a多了100元,這時候a讀到了b未提及的資料(髒讀)

b視窗start transaction;

start account set money=money+100 where name ='aaa';

-----不要提交,轉到a視窗查詢

2.當把事務的隔離級別設定為read committed時,會引發不看重復讀和虛讀,但避免了髒讀

a視窗set transaction isolation level read committed;

start transaction;

select * from account;

-----發現a賬戶是1000元,轉到b視窗

select * from account

-----發現a多了100元,這時候a讀到了別的事務提交的資料,2次讀取a帳戶是不同的結果(不可重複讀)

b視窗start account set money=money+100 where name ='aaa';

start transaction;

commit;

-----轉到a視窗

3.當把事務的隔離級別設定為repeatable committed(mysql預設級別)時,會引發和虛讀,但避免了髒讀,不看重復讀

a視窗set transaction isolation level read committed;

start transaction;

select * from account;

-----發現表有4條記錄,轉到b視窗

select * from account;

-----可能發現表有5條記錄,這時候發生了a讀取到了另外乙個事務插入的資料(虛讀)

b視窗start transaction;

insert into account(name,money)values ('ggg',1000);

commit;

-----轉到a視窗

4.當把事務的隔離級別設定為serializable時,會避免所有問題

a視窗set transaction isolation level read committed;

start transaction;

select * from account;

----跳到b視窗

b視窗start transaction;

insert into account(name,money)values ('ggg',1000);

----發現不能插入,只能等待a結束事務

set transaction isolation level 設定事務隔離級別

select @@tx_isolation 查詢當前事務隔離級別

事務併發問題和隔離級別

事務有四個屬性,acid。事務併發會造成三個問題 髒讀,不可重複讀,幻讀。髒讀 事務a讀了事務b更新的資料,然後事務b回滾撤銷了,事務a讀取的資料就是髒讀。不可重複讀 事務a讀取資料num後,事務b對其修改,事務a再次讀取資料num,前後不一致,這情況為不可重複讀。幻讀 事務a讀取資料 一張表 事務...

MySQL事務隔離級別 解決併發問題

mysql事務隔離級別 1.髒讀 騙錢的手段,兩個視窗或執行緒分別呼叫資料庫轉賬表,轉賬後未提交,對方檢視到賬後,rollback,實際錢沒轉.演示方法 mysql預設的事務隔離級別為repeatable read 比oracle高,因為mysql本身弱 使用select tx isolation ...

MySQL 事務的ACID 併發問題 隔離級別

小結 不可重複讀的和幻讀很容易混淆,不可重複讀側重於修改,幻讀側重於新增或刪除。解決不可重複讀的問題只需鎖住滿足條件的行,解決幻讀需要鎖表 事務隔離級別 髒讀不可重複讀 幻讀鎖策略 讀未提交 read uncommitted 是是 是不會鎖住指定的行 不可重複讀 read committed 否是 ...