mysql的间隙锁原理
首先明确一个大前提 就是主键索引 和唯一索引是锁的当前行 而间隙锁锁定的是 索引字段 靠近左边的第一个值+1 以及靠近右边的第一个字段-1 所以 间隙锁 在很多的情况下 差不多就是行锁 可以这么主观的认为
然后还要明确一个大前提 会对什么加锁 首先where条件中的字段进行加锁 insert会加锁 看这个id是否被间隙锁给锁住。 然后还有一个地方 对于set的字段会查看要set成的值 是否被锁定。很神奇(下面找一个场景来介绍)
在还有一点就是 不同的就是 两个where条件的索引 是不互相印象的 除非命中了同一行 因为innodb会在间隙锁的基础上 加上行锁行程next-key lock;
有这么一张表数据为下图 shippingPlan 和 orderStatus 都是独立的索引 id 为主键索引
![](https://img-blog.csdnimg.cn/a29f8122c58a48b8ad92eb5967116483.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA6JC95bCYbG92ZTE3,size_20,color_FFFFFF,t_70,g_se,x_16)
首先来看一个next-key lock的例子
Set autoCommit = 0;
update furniture_oms__shipping_plan_line_b_o set buyerName = '231' where shippingPla