MySQL中行锁实现的几种算法

参考答案

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—

0 条回复 A文章作者 M管理员
    暂无讨论,说说你的看法吧