注册 登录
编程论坛 MySQL论坛

关于mysql的间隙锁next-key的问题

tonyiscoding 发布于 2020-03-08 20:17, 2905 次点击
首先我在图书《深入浅出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编辑过]

1 回复
#2
lsy28861732020-04-22 09:56
请提供一下信息
1.mysql版本
2.表结构
1