6.8 间隙锁把全表都锁住了,怎么办?



一、Next-Key Lock的加锁逻辑

这是在可重复读的间隔级别下,才会有间隙锁。

Next-Key Lock:是行锁+间隙锁的结合。

1.1 5条理论

Next-Key:间隙+下一个行记录。

1.2 示例数据表

1.3 规则1:等值查询间隙锁

1.

注意:

  • 是左开右闭的区间;
  • 是主键索引

2.示例

MySQL的默认的隔离性的级别是:可重复读。

(1)10-20是间隙,是锁上的

  • id为11的行记录,是没有的值的,因为是间隙。即10-20的间隙,已经被锁上了。别的事务,凡是插入这个区间值得,都会卡住。

(2)值20是没加锁的。

1.4 规则2:非唯一索引等值锁

MySQL的默认的隔离性的级别是:可重复读。Repeatable Read

1.5 规则3:主键索引范围锁

1.6 规则4:非唯一索引范围锁

1.7 规则5:非索引字段查询

二、小结

本质:让所有可能出现幻读的地方,都加上锁。包括间隙。

声明:Jerry's Blog|版权所有,违者必究|如未注明,均为原创|本网站采用BY-NC-SA协议进行授权

转载:转载请注明原文链接 - 6.8 间隙锁把全表都锁住了,怎么办?


Follow excellence, and success will chase you.