记录下网上看到的又用的资料:需要反复阅读以加深理解啊
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=771:MySQL 加锁处理分析,博主分析的很详细,阅读后受益匪浅
http://hedengcheng.com/?p=844:一个最不可思议的MySQL死锁分析:仔细阅读后,对mysql的加锁理解更加深一步
本文详细探讨了MySQL中不同条件下RC隔离级别的加锁行为,包括主键、唯一索引、非唯一索引及无索引情况下的具体实现,并附带相关资源链接进一步深化理解。

2万+

被折叠的 条评论
为什么被折叠?



