参考答案
MySQL中行锁实现的三种算法:
1. Record Lock
- 单个记录上的锁。
- 锁总会锁住索引记录,锁住的时key。
- 如果InnoDB存储引擎表在建立的时候没有设置任何一个索引,那么这时InnoDB会使用隐式的主键进行锁定。
2. Gap Lock
- 间隙锁,锁定一个范围,但不包含记录本身。
- 锁定索引记录间隙,确保索引记录的间隙不变。
- 间隙锁是针对事务隔离级别,为可重复读或以上级别而配的。
- Gap Lock在InnoDB的唯一作用,是防止其他事务的插入操作,以此防止幻读。
3. Next-Key Lock
- Gap Lock+Record Lock,锁定一个范围,并且锁定记录本身。
- 在Next-Key Lock 算法下,InnoDB对于行的查询都是采用这种锁定的算法。可以有效的防止幻读。
- 当查询的索引含有唯一属性时,InnoDB存储引擎会对Next-Key Lock 进行优化,将其降级为 Record Lock,即仅锁住索引本身,而不是范围。
- 当查询的索引为辅助索引时,默认使用Next-Key Locking技术进行加锁,锁定范围是前一个索引到后一个索引之间范围。
以上,是MySQL面试题【MySQL行锁实现的几种算法】的参考答案。
输出,是最好的学习方法。
欢迎在评论区留下你的问题、笔记或知识点补充~
—end—