mysql的锁 和可重复读 RR的实际业务场景与实际意义

本文探讨MySQL中InnoDB存储引擎的锁机制,包括行锁的实现原理、RR隔离级别下可能出现的问题,如多次读取数据导致的不一致性、汇总金额不符及数据遗漏等问题,并介绍gap锁的作用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

mysql的锁
锁的颗粒度,决定并发度和速度
InnoDB的行锁是针对索引加的锁,不是针对记录加的锁。并且该索引不能失效,否则都会从行锁升级为表锁;

rr的业务场景:多个相关的查询,同时取出来使用,并且要保证业务含义一致
1》 对数。 上个月的余额,本月的账单(3个结果),当前的余额(修改了1个结果),正常应该是上月余额-本月账单==当前余额,现在因为2次读时,差了1个更新事务,所以对不上了
2》 汇总数额不对。同一个事务内,先查详情,后聚合count,详情加起来和count返回的结果不一致
3》 当前读的结果会有遗漏。比如 update user set tag='成年' where age >17; 查询时有3行满足,真正执行update时,可能别的事务又插入了1行数据,导致新插入的数据满足条件但是没有被更新。
delete from user where age < 18; # 会有漏网之鱼


gap锁,在rr级别,当前读(比如update delete的where条件)时,除了锁记录,也会锁住范围

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值