MySQL唯一索引范围查询的加锁情况 | 您所在的位置:网站首页 › mysql查询不存在的数据会锁表吗 › MySQL唯一索引范围查询的加锁情况 |
之前看小林MySQL遇到的一个问题,简单记录一下。 唯一索引范围查询当唯一索引进行范围查询时,会对每一个扫描到的索引加 next-key 锁,然后如果遇到下面这些情况,会退化成记录锁或者间隙锁: 情况一:针对「大于等于」的范围查询,因为存在等值查询的条件,那么如果等值查询的记录是存在于表中,那么该记录的索引中的 next-key 锁会退化成记录锁。 数据库版本MySQL 8.0.27 InnoDB 存储引擎 表数据如下图所示,其中 id 为主键, age 为唯一索引 唯一索引,「大于等于」范围查询,且记录存在的场景,主键索引确实会如上述在等值的位置退化为“X,REC_NOT_GAP” 普通唯一索引唯一索引,「大于等于」范围查询,且记录存在的场景,普通的唯一索引并不会退化为记录锁,而是使用临键锁“X”,如下图所示。 个人认为唯一索引应该和主键索引一样,在等值的位置应该是“记录锁”,因为有唯一性,不会插入新的行,由于记录锁存在也不会删除和更新,可能这是一个可以优化的地方吧。 MySQL是怎么加锁的? |
CopyRight 2018-2019 实验室设备网 版权所有 |