mysql数据库4种事务隔离级别验证

1.建表

create table account(id int primary key,name varchar(20),account decimal(15,3));

2.准备初始数据

insert into account(id,name,account) values (1,'lilei',450),(2,'hanmei',16000),(3,'lucy',2400);

3.查看当前默认隔离级别

4.读未提交试验

set session transaction isolation level read uncommitted;

打开客户端A,读取account表

打开另一个客户端B,同样设置隔离级别为读未提交,并更新记录

结论:这时虽然B的事务未提交,但是A已经能查到B更新的记录

5.设置A和B,隔离级别为read committed

B端结果

A端结果

结论:可以看到在A前后两次查询,未读取到中间B更新但未提交的数据,解决了脏读的问题

6.可重复读测试,将A和B隔离级别都设置为repeatable read

B在A查询事务间更新数据并提交

A多次查询,结果只有在A结束事务才看到最新的数据,事务期间读取的数据是一样的

结论:A在事务中多次查询的结果是一样的,即使B在A事务期间插入、更新、删除了数据,这时A查询结果依然不变,直到A提交后再查询,才能读取数据库中最新记录。

7.串行化测试

将A和B隔离级别都设置为serializable

start transaction;

B

insert into account values(5,'tom',0);
ERROR 1205 (HY000): Lock wait timeout exceeded; try restarting transaction

B会等待,直到超时。

 

 

 

 

 

 

 

 

 

 

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值