57,064
社区成员
发帖
与我相关
我的任务
分享

为什么session_2上面插入语句出现锁等待的情况?InnoDB是行锁,在session_1里面锁住了a=5的行,其他他应该不受影响。为什么?
分析如下:
分析如下:
因为InnoDB对于行的查询采用了Next-Key Lock的算法,锁定的不是单个值,而是一个范围。上面的索引有1,3,5,11,被Next-Key Locking的区间为:
[-无穷,1),[1,3),[3,5),[5,11),[11,+无穷)
下面我们就可以解释上面的出现的问题了:
mysql> select * from test where id=5 for update;
+------+
| id |
+------+
| 5 |
+------+
1 row in set (0.00 sec)
该SQL语句锁定的范围是[3,5),[5],[5,11),所以当我们视图插入5,6,7,8,9,10会被锁住。而插入非这个范围的值都是正常的。[/quote]
我测试了一下你的例子,发现当id=5存在时,3、5、6、10等都可以insert,也就是只有单一个行锁