MySQL:解决脏读问题
- 脏读非常危险,比如张三向李四购买商品,张三开启事务,向李四账号转入 500 块,然后打电 话给李四说钱 已经转了。李四一查询钱到账了,发货给张三。张三收到货后回滚事务,李四的再 查看钱没了。
- 解决方案
- 将全局的隔离级别进行提升为: read committed
1. 在 A 窗口设置全局的隔离级别为 read committed
set global transaction isolation level read committed;
2. 重新开启A窗口, 查看设置是否成功.
select @@tx_isolation;
3. 开启B 窗口, A 和 B 窗口选择数据库后, 都开启事务
4. A 窗口只是更新两个人的账户,不提交事务
-- tom账户 -500元 UPDATE account SET money = money - 500 WHERE NAME = 'tom'; -- jack账户 + 500元 UPDATE account SET money = money + 500 WHERE NAME = 'jack';
5. B 窗口进行查询,没有查询到未提交的数据
select * from account;
6. A窗口commit提交数据
commit;
7. B 窗口查看数据
select * from account;