mysql锁之Next-Key Locks

Posted 无为有道

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了mysql锁之Next-Key Locks相关的知识,希望对你有一定的参考价值。

 

一个Next-key锁结合了行锁和gap锁。

InnoDB执行一个行级别锁在这样的一个途径,那就是它搜索或者扫描一个表索引时,它设置共享或者独占锁在它遭遇的索引记录上。于是,行级锁是真实的行记录锁。一个next-key锁在一个行记录上总是这个行记录前的间隙。这就是一个next-key是一个索引记录锁加上一个在这个记录前的间隙锁。如果一个会话有一个共享锁或者一个独占锁在一个索引的记录R上,另外的会话不能插入一个新索引记录在R前的间隙。

猜测一个索引包含10,11,13,20。可能这个索引的next-key锁盖以下间隔,这个间隔在一个圆括号表示的排除节点符号和一个方括号表示包含节点符号。

看这个最后的间隔,next-key锁锁定在索引中上面的最大值和一个“临界值”伪记录,这个伪记录有一个比任何实际值都高的值,这个伪记录不是真实的记录,因此,在这个影响下,这个next-key锁仅仅锁了跟随在最大索引值的间隙。

默认情况下,InnoDB操作在可重复度事务隔离级别,在这个案例,InnoDB使用next-key为查找和索引扫描锁定,防止phantom(幻影)行的出现。

事务数据为一个next-key锁展现到跟随在下面语句的输出:

 

以上是关于mysql锁之Next-Key Locks的主要内容,如果未能解决你的问题,请参考以下文章

MySQL next-key lock 加锁范围是什么?

Mysql一分钟定位 Next-Key Lock,你需要几分钟

Mysql一分钟定位 Next-Key Lock,你需要几分钟

Mysql加锁过程详解-innodb下的记录锁,间隙锁,next-key锁

Mysql加锁过程详解-innodb下的记录锁,间隙锁,next-key锁

看来,MySQL next-key lock 的 bug 并没有被修复!