演示不同隔離級別下的併發問題
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 否是 ...