2、针对「小于或者小于等于」的范围查询
实验一:针对「小于」的范围查询时,查询条件值的记录「不存在」表中的情况 。假设事务 A 执行了这条范围查询语句 , 注意查询条件值的记录(id 为 6)并不存在于表中 。
mysql> begin;Query OK, 0 rows affected (0.00 sec)mysql> select * from user where id < 6 for update;+----+--------+-----+| id | name | age |+----+--------+-----+| 1 | 路飞 | 19 || 5 | 索隆 | 21 |+----+--------+-----+3 rows in set (0.00 sec)
事务 A 加锁变化过程如下:- 最开始要找的第一行是 id = 1,于是对该主键索引加的是范围为 (-∞, 1] 的 next-key 锁;
- 由于是范围查找,就会继续往后找存在的记录,扫描到的第二行是 id = 5,所以对该主键索引加的是范围为 (1, 5] 的 next-key 锁;
- 由于扫描到的第二行记录(id = 5) , 满足 id < 6 条件,而且也没有达到终止扫描的条件,接着会继续扫描 。
- 扫描到的第三行是 id = 10,该记录不满足 id < 6 条件的记录,所以 id = 10 这一行记录的锁会退化成间隙锁,于是对该主键索引加的是范围为 (5, 10) 的间隙锁 。
- 由于扫描到的第三行记录(id = 10),不满足 id < 6 条件,达到了终止扫描的条件,于是停止扫描 。
文章插图
- 在 id = 1 这条记录的主键索引上 , 加了范围为 (-∞, 1] 的 next-key 锁,意味着其他事务即无法更新或者删除 id = 1 的这一条记录,同时也无法插入 id 小于 1 的这一些新记录 。
- 在 id = 5 这条记录的主键索引上 , 加了范围为 (1, 5] 的 next-key 锁,意味着其他事务即无法更新或者删除 id = 5 的这一条记录,同时也无法插入 id 值为 2、3、4 的这一些新记录 。
- 在 id = 10 这条记录的主键索引上,加了范围为 (5, 10) 的间隙锁 , 意味着其他事务无法插入 id 值为 6、7、8、9 的这一些新记录 。
select * from performance_schema.data_locks\G;
这条语句来看看事务 A 加了什么锁 。输出结果如下,我这里只截取了行级锁的内容 。
文章插图
从上图中的分析中,也可以得知事务 A 在主键索引加的三个锁,就是我们前面分析出那三个锁 。
虽然这次范围查询的条件是「小于」,但是查询条件值的记录不存在于表中( id 为 6 的记录不在表中),所以如果事务 A 的范围查询的条件改成 <= 6 的话,加的锁还是和范围查询条件为 < 6 是一样的 。大家自己也验证下这个结论 。
因此,针对「小于或者小于等于」的唯一索引范围查询,如果条件值的记录不在表中,那么不管是「小于」还是「小于等于」的范围查询 , 扫描到终止范围查询的记录时,该记录中索引的 next-key 锁会退化成间隙锁,其他扫描的记录 , 则是在这些记录的索引上加 next-key 锁 。
实验二:针对「小于等于」的范围查询时,查询条件值的记录「存在」表中的情况 。假设事务 A 执行了这条范围查询语句,注意查询条件值的记录(id 为 5)存在于表中 。
mysql> begin;Query OK, 0 rows affected (0.00 sec)mysql> select * from user where id <= 5 for update;+----+--------+-----+| id | name | age |+----+--------+-----+| 1 | 路飞 | 19 || 5 | 索隆 | 21 |+----+--------+-----+2 rows in set (0.00 sec)
事务 A 加锁变化过程如下:- 最开始要找的第一行是 id = 1,于是对该记录加的是范围为 (-∞, 1] 的 next-key 锁;
- 由于是范围查找,就会继续往后找存在的记录,扫描到的第二行是 id = 5,于是对该记录加的是范围为 (1, 5] 的 next-key 锁 。
- 由于主键索引具有唯一性,不会存在两个 id = 5 的记录,所以不会再继续扫描 , 于是停止扫描 。
推荐阅读
- 原神夜鸦谁是那个怠惰之人怎么完成
- 恋与制作人寻找星座该怎么玩
- 洛克王国祈愿蛇仙怎么搭配技能
- 洛克王国祈愿蛇仙怎么获取
- 金铲铲之战驯龙传送法阵容怎么搭配
- iqoo7玩游戏怎么样_iqoo7游戏体验
- 索尼电视2021年电视新品怎么样_索尼电视2021年电视新品评测
- 专的读音 专怎么读
- 手机怎么把QQ空间说说一次性全删掉(qq如何恢复删掉的说说)
- win7烟雾头怎么调最清楚2021(win7旗舰版烟雾保护头最新)