【数据库】验证同一个事务里能否读取到已更新但未提交的数据

在本机启动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提交的数据。

 

 

 

 

 

 

 

 

 

  • 11
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 10
    评论
评论 10
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值