| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 2842 人关注过本帖
标题:关于mysql的间隙锁next-key的问题
只看楼主 加入收藏
tonyiscoding
Rank: 1
等 级:新手上路
帖 子:1
专家分:0
注 册:2020-3-8
收藏
 问题点数:0 回复次数:1 
关于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编辑过]

搜索更多相关主题的帖子: 查询 结果 mysql age 条件 
2020-03-08 20:17
lsy2886173
Rank: 1
等 级:新手上路
帖 子:6
专家分:0
注 册:2020-4-22
收藏
得分:0 
请提供一下信息
1.mysql版本
2.表结构
2020-04-22 09:56
快速回复:关于mysql的间隙锁next-key的问题
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.023374 second(s), 10 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved