在本机启动mysql后来验证该实验。
1.本机启动mysql
系统偏好设置 -》 MYSQL -》 启动
2.命令行登陆mysql
/usr/local/mysql/bin/mysql -u root -p
3.先查看下数据
use mytest;
select * from user_info;
4.查看隔离级别
select @@transaction_isolation;
可以看到默认的隔离级别为可重复读。
5.查看是否开启了自动提交事务
show variables like '%autocommit%';
6.取消自动提交事务
set @@autocommit=0;
7.开启事务A
start transaction;
8.执行更新操作
update user_info set age = 10 where id = 1000;
9.在事务A中查询数据
select * from user_info;
可以看到本事务可以查询到未提交的数据。
这是因为事务的隔离级别是指不同事务之间。
10.开启另外一个事务B查询数据
select * from user_info;
可以看到事务B查询不到事务A未提交的数据。
11.提交事务A,在事务A中再次查询数据
commit;
12.在事务B中再次查询数据
仍然查询不到事务A提交的数据,这是因为目前的隔离级别是可重复度,事务B只能读取其事务开启前的数据版本。
13.重新打开事务C查询数据。
事务C可以查询到A提交的事务。是因为事务C开启前,事务A已经提交了。
结论:在本事务A中,可以查询到本事务已更新但未提交的数据。
当隔离级别为可重复读,事务B在事务A提交之前开启,事务B无法读取到事务A提交的数据;而事务C是在事务A提交之后开启,可以读取到事务A提交的数据。