避免脏读,演示不可重复读发生
-
开启两个窗口A,B
-
设置A窗口的隔离级别为read committed;
SET SESSION TRANSACTION ISOLATION LEVEL read committed;
-
分别在两个窗口中开启事务:
start transaction;
-
在B窗口中完成转账
update account set money = money - 1000 where name= '小张';
update account set money = money + 1000 where name= '小凤';
***** 没有提交事务!!!
-
在A窗口中进行查询:
select * from account;
***** 发现这个时候没有转账成功!!!(没有查询到另一个事务未提交的数据:说明已经避免了脏读)。
-
在B窗口中提交事务
commit;
-
在A窗口查询
select * from account;
***** 发现这次的结果已经发生了变化!!!(已经发生不可重复读:一个事务已经读到了另一个事务提交的update的数据,导致多次查询结果不一致。)