行级锁(row-level locks)与索引记录锁(index record locks)的区别是什么?
行级锁与索引记录锁的区别
1. 概念层级不同
- 行级锁是InnoDB锁机制中按锁粒度划分的一个类别,指针对数据表单行数据的锁定,是一个宽泛的概念。
- 索引记录锁是行级锁的具体实现形式,是InnoDB用来实现行级锁定的核心手段。
2. 锁定对象有差异
- 行级锁的锁定目标逻辑上是数据表中的整行数据,关注的是数据行本身。
- 索引记录锁直接锁定的是索引条目:哪怕表没有显式创建索引,InnoDB也会生成隐藏的聚簇索引,通过锁定这些索引条目来间接锁定对应的行数据。
3. 实现逻辑的区别
- 行级锁只是定义了锁作用的范围(单行),不涉及具体的锁定方式。
- 索引记录锁是落地的锁定逻辑:当执行
SELECT ... FOR UPDATE这类带锁定的查询时,InnoDB会根据查询条件定位到对应的索引记录,对这些索引条目加锁,以此阻止其他事务对对应行进行插入、更新或删除操作。
参考官方描述:
记录锁是对一条索引记录(index record)的锁。例如,执行
SELECT c1 FROM t WHERE c1 = 10 FOR UPDATE;会阻止其他事务插入、更新或删除t表中c1值为10的行。
即使表没有定义任何索引,记录锁也始终锁定索引记录(index record)。这种情况下,InnoDB会创建一个隐藏的聚簇索引,并使用该索引进行记录锁定。
内容的提问来源于stack exchange,提问作者user19551894
相关产品推荐
相关产品推荐

