mysql隔离级别验证_MySQL事务隔离级别以及验证

9521e9eea535d721b88a08dab05d267a.png

查询初始数据

50a93b7f7f39ecf463a19aa2070ece62.png

开启A事务  并做更新操作

a7f295e60e0ae9b5bb3c3f9f1f4bf3f1.png

7ad9e41e989510e688e2b5fb168630a4.png

再另一端 B开始另一个事务查询 事务级别设置为读未提

62a617cab6b9534993ae95d2916995cf.png

查询到事务未提交的数据  a的count修改为3 但是没有提交

8e227c90f8fd44a2b98455720ed1094a.png

2 第二个级别 读已提交 避免脏读问题 但是有不可重复读问题

回滚数据 修改隔离级别 确保都是 读已提交级别

客户端A

475de9dc092f1535af0d3b339ecb593e.png

客户端B

8f934477f9c5de7116ed21dce1871024.png

72209fd9f9423cdf70eac32a2b77df99.png

验证 脏读问题

客户端A

d89fec4b04b92f8f4114a6a7564f2f17.png

客户端B  查询出结果 没有脏读问题

392c0fa5986c7b532e784e9436e0d347.png

A提交事务 B再查询

86d9cd0444c74c2f363d186fbc11a214.png

a882c22a749a34717528028fd9eabea5.png

测试不可重复读问题

A客户端 开始事务 先进行一次查询  仍然设置为读已提交的隔离级别

6cc87ed93bfe407fac271b34b0f22775.png

此时 A客户端 没有提交事务 开启B客户端 做更新操作

81865a843f9d4a5bdfd87a6b79731a17.png

此时A客户端再次查询 结果不一样  在一个事务中 两次查询不一样

8694fcfdcd91f7702a4bcd02f14108cf.png

3 第三个级别 可重复读  避免 不可重复读问题;

确保客户端A 和 客户端B都是 可重复读的隔离级别

6ec7859bde5be84a6ea669675d385eb8.png

客户端A 第一次查询

79f801f0c3b9cb44d0b0e8f55f2ef39d.png

客户端B 开启事务 并更新 然后 提交事务

23391e81b927cf49b1291067533d1bb4.png

这时 客户端A 再次查询数据 仍然是15 所以 避免了不可重复读的问题

f8a4285c7782a66b6d504bb49d69f408.png

测试幻读问题

同样保持之前的数据 客户端B开始事务 插入数据

客户端B

adf6d14b51dc4f98b7ec6c3d840da73d.png

此时 客户端A再次查询 还是一样

f63126be61214b3bb6c446fc03bede87.png

经过查询  据说来源于 MySQL技术内幕 :InnoDB存储引擎

之前提到一般情况下MySQL的InnoDB引擎在可重复读的情况下是没法保证不出现幻读的,但实际情况是MySQL可以通过加锁来防止幻读的出现,这种锁定通过Next-key机制来实现,是属于记录锁和间隙锁(Gap锁)的结合。

《MySQL技术内幕:InnoDB存储引擎》-第六章:锁

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值