1 | ##准备测试数据 |
非唯一索引
范围查询,临键锁(一)
举例
1 | #事务A |
结论
列 | 值 |
---|---|
数据(col1) | 10、20、40、50 |
查询条件 | > 30 and < 50 |
锁类型 | 临键锁 |
加锁区间 | (20,40]、(40,50] |
记录锁 | 40,50 |
范围查询,临键锁(二)
举例
1 | #事务A |
结论
列 | 值 |
---|---|
数据(col1) | 10、20、30、40、50 |
查询条件 | > 30 and < 50 |
锁类型 | 临键锁 |
加锁区间 | (30,40]、(40,50] |
记录锁 | 40,50 |
范围查询,临键锁(三)
举例
1 | #事务A |
结论
列 | 值 |
---|---|
数据(col1) | 10、20、30、40、50 |
查询条件 | < 30 |
锁类型 | 临键锁 |
加锁区间 | (-∞,10]、(10,20]、(20,30] |
记录锁 | 10,20,30 |
范围查询,临键锁(四)
举例
1 | #事务A |
结论
列 | 值 |
---|---|
数据(col1) | 10、20、30、40、50 |
查询条件 | > 40 |
锁类型 | 临键锁 |
加锁区间 | (40,50],(50,∞] |
记录锁 | 50 |
范围查询,间歇锁
举例
1 | #事务A |
结论
列 | 值 | 扩展 |
---|---|---|
数据(col1) | 10、20、30、40、50 | 10、20、30、40、50 |
查询条件 | > 50 | >=50 |
锁类型 | GAP锁 | 临键锁 |
加锁区间 | (50,∞) | (50,∞] |
记录锁 | 无 | 50 |
备注 | 唯一索引/主键索引在这个场景下与非唯一索引的结论一致 |
范围查询,临键锁(五)
举例
1 | #事务A |
结论
列 | 值 |
---|---|
数据(col1) | 10、20、30、40、50 |
查询条件 | < 10 |
锁类型 | 临键锁 |
加锁区间 | (-∞,10] |
记录锁 | 10 |
备注 | 唯一索引/主键索引在这个场景下与非唯一索引的结论一致 |
等值查询,临键锁
举例
1 | #事务A |
结论
列 | 值 |
---|---|
数据(col1) | 10、20、30、40、50 |
查询条件 | = 30 |
锁类型 | 临键锁 |
加锁区间 | (20,30]、 (30,40)注意此处是小括号,40不加锁,属于GAP锁 |
记录锁 | 30 |
等值查询,间歇锁
举例
1 | #事务A |
结论
列 | 值 |
---|---|
数据(col1) | 10、20、30、40、50 |
查询条件 | = 35 |
锁类型 | Gap锁 |
加锁区间 | (30,40) |
记录锁 | 无 |
范围查询,临键锁(六)
举例
1 | #事务A |
结论
列 | 值 |
---|---|
数据(col1) | 10、20、30、40、50 |
查询条件 | > 31 and < 36 |
锁类型 | 临键锁 |
加锁区间 | (30,40] |
记录锁 | 40 |
1 | #多增加一些数据,方便唯一索引的测试 |
唯一索引/主键索引
等值查询,记录锁
举例
1 | #事务A |
结论
列 | 值 |
---|---|
数据(id) | 1、2、3、4、5、10、15、20、25、30 |
查询条件 | = 10 |
锁类型 | 记录锁 |
加锁区间 | 无 |
记录锁 | 10 |
等值查询,间歇锁
举例
1 | #事务A |
结论
列 | 值 |
---|---|
数据(id) | 1、2、3、4、5、10、15、20、25、30 |
查询条件 | = 7 |
锁类型 | Gap锁 |
加锁区间 | (5,10) |
记录锁 | 10 |
备注 | 条件是唯一索引/主键索引,做等值查询,数据不存在时,变为Gap锁 |
范围查询,临键锁
举例
1 | #事务A |
结论
列 | 值 | 扩展 |
---|---|---|
数据(id) | 1、2、3、4、5、10、15、20、25、30 | 1、2、3、4、5、10、15、20、25、30 |
查询条件 | > 6 and < 18 | > 16 and < 19 |
锁类型 | 临键锁 | 临键锁 |
加锁区间 | (5,10],(10,15]、(15,20] | (15,20] |
记录锁 | 10、15、20 | 20 |
备注 | 条件是唯一索引/主键索引,做范围查询时,变为临键锁(查询结果有数据或者没有数据,都会变为临键锁) |