关于mysql的间隙锁next-key的问题
首先我在图书《深入浅出mysql》上看到的是: 对于键值在条件范围内但不存在的记录, 叫做间隙锁, 那么是否也就可以说明, 间隙锁只在范围查找符前提下才可能产生? 其次我发现一种情况, 如果我的where后接多个 等于条件,比如
```
select * from table tab_a where column_1 = x and column_2 = y for update;
```
这样的情况, 我用for update 产生的锁会是什么锁呢?
原则上来说,如果 `column_1` 和 `column_2`都有索引的情况下, 应该只对满足条件的record 上锁,也就是需要上升为行锁,
不过实际测试我发现, 队伍满足 `column_1 = x` 但是不满足 `column_2 = y`的行, 也有被锁的情况,而且情况很奇怪的是, 满足1不满足2 的被锁了,满足2 但是不满足 1 的没被锁, 这我不清楚是不是mysql 的不稳定性问题:
如下,上测试的图:
测试的过程:
1. 我创建了一个表, 分别给id 和 age 加了普通索引
2. 按照 id = 1 和 age = 20 我做了 for update 的查询, 查询结果row = 1, 没有autocommit
3. 此时宁外一个session, 进行了分别按照 id = 2和age = 21 的两次做了查询,
4. 结果 id =2 的正常查询出了结果, 这个结果其实满足 age = 20 的 条件的
5. age = 21 阻塞的原因应该是查询到了满足 id = 1的record
如果有人给解答,十分感谢
[此贴子已经被作者于2020-3-8 20:22编辑过]