MySQL:隔离性问题(脏读)&回滚演示
1 脏读演示
脏读: 一个事务读取到了另一个事务中尚未提交的数据
1. 打开窗口登录 MySQL,设置全局的隔离级别为最低
1) 登录MySQL
2) 使用db2 数据库
use db2;
3) 设置隔离级别为最低 读未提交
set global transaction isolation level read uncommitted;
2. 关闭窗口,开一个新的窗口A ,再次查询隔离级别
1) 开启新的 窗口A
2) 查询隔离级别
select @@tx_isolation;
3. 再开启一个新的窗口 B
1) 登录数据库
2) 选择数据库
use db2;
3) 开启事务
start transaction;
4) 查询
select * from account;
4. A窗口执行
1) 选择数据库
use db2;
2) 开启事务
start transaction;
3)执行修改操作
-- tom账户 -500元 UPDATE account SET money = money - 500 WHERE NAME = 'tom'; -- jack账户 + 500元 UPDATE account SET money = money + 500 WHERE NAME = 'jack';
5. B窗口查询数据
1) 查询账户信息
select * from account;
6. A窗口转账异常,进行回滚
rollback;
7. B窗口再次查询账户
select * from account;