mysql的加锁与死锁问题

本文详细探讨了MySQL中不同条件下RC隔离级别的加锁行为,包括主键、唯一索引、非唯一索引及无索引情况下的具体实现,并附带相关资源链接进一步深化理解。

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

记录下网上看到的又用的资料:需要反复阅读以加深理解啊


 sql语句: delete from t1 where id = 10;

 RC(Read Commited)RR(Repeatable Read )
id主键+RC只需要对id对应的记录加上排它锁同RC
id唯一索引+RC需要在id对应的唯一索引上加锁,需要在聚簇索引上对应的记录加锁同RC
id非唯一索引+RC所有满足SQL查询条件的记录都加锁,同事这些记录在主键索引上的记录也会加锁通过id索引定位到第一条满足条件的记录,加记录的排他锁,加GAP上的GAP锁,
然后加主键聚簇索引上的记录排它锁。然后读取吓一跳,重复进行,直到进行到
不再满足条件的记录, 此时不加记录的排它锁,但是需要加GAP锁。
id无索引+RC通过聚簇索引进行全表扫描,然后对每条记录都加锁。锁表上所有记录,同事锁上聚簇索引内的所有GAP,以杜绝发生更新/插入/删除 操作。


http://hedengcheng.com/?p=771MySQL 加锁处理分析,博主分析的很详细,阅读后受益匪浅

http://hedengcheng.com/?p=844:一个最不可思议的MySQL死锁分析:仔细阅读后,对mysql的加锁理解更加深一步

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值