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

1dd47c2bdafaad06ad3f5aa8ed06e139.png

查询初始数据

3db5b665e5376cbba967feae5ecf3daa.png

开启A事务  并做更新操作

f66705acf47eb396c34c2d7770f844fc.png

efe603adff00b2949351f1a3b8d1270a.png

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

20c8d03496fcca03a3b846f4209dc7a3.png

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

fcaed4861ac74fba97979914cba905f0.png

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

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

客户端A

8970054db57c9834ce7964380b271d25.png

客户端B

69755bd6b7aee6f28ccdf4ed69b66d38.png

050f4f825335fd5ff05d344b15277e0d.png

验证 脏读问题

客户端A

72e429152c90b32f58bfd84ba0d83281.png

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

6df94fccd9d780c834064af4e279bc2b.png

A提交事务 B再查询

c692521ebea015be4356dd8d273d9d44.png

d2a501c6e1034359498b970df9b8ddd2.png

测试不可重复读问题

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

fe12cde05d8b9790bda04524c5bcf11d.png

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

9bfbb04155eb17099ede32ce47380a2a.png

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

5e7bd4136c939243579055768fe38e98.png

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

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

b66bda103a10f79615ec1dcde3680ba4.png

客户端A 第一次查询

494781856e5169b5501c34a236a4a35e.png

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

35ecaeb13d1bc068149817df56a0616e.png

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

b2b732c19ffa206d7c47c99beb747618.png

测试幻读问题

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

客户端B

cbf1055005592057fabf113214f26222.png

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

7885c93d26d576d8bd9b6d52acf43c3b.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、付费专栏及课程。

余额充值