当前位置: 首页 > news >正文

MySQL间隙锁在查询时锁定的范围

文章目录

  • 基础环境设置
  • 一、等值查询的间隙锁
    • 1.1 查询不存在的值
    • 1.2 查询存在的值
  • 二、范围查询的间隙锁
    • 2.1 闭区间范围查询
    • 2.2 开区间范围查询
    • 2.3 单边界范围查询
  • 三、特殊情况的间隙锁
    • 3.1 空表的间隙锁
    • 3.2 只有一条记录的表
  • 四、锁定范围的边界规则总结

基础环境设置

CREATE TABLE test_gap (id INT PRIMARY KEY,value INT,name VARCHAR(50),INDEX idx_value (value)
) ENGINE=InnoDB;INSERT INTO test_gap VALUES
(1, 10, 'A'),
(3, 20, 'B'), 
(5, 30, 'C'),
(7, 40, 'D'),
(9, 50, 'E');

一、等值查询的间隙锁

1.1 查询不存在的值

查询SQL锁定范围说明
SELECT * FROM test_gap WHERE value = 15 FOR UPDATE;(10, 20)15位于10和20之间
SELECT * FROM test_gap WHERE value = 25 FOR UPDATE;(20, 30)25位于20和30之间
SELECT * FROM test_gap WHERE value = 5 FOR UPDATE;(-∞, 10)5小于最小值10
SELECT * FROM test_gap WHERE value = 60 FOR UPDATE;(50, +∞)60大于最大值50

1.2 查询存在的值

查询SQL锁类型说明
SELECT * FROM test_gap WHERE value = 20 FOR UPDATE;临键锁记录锁+前后间隙锁
SELECT * FROM test_gap WHERE id = 3 FOR UPDATE;记录锁主键查询,无间隙锁

二、范围查询的间隙锁

2.1 闭区间范围查询

查询SQL具体锁定区间
WHERE value >= 20 AND value <= 40(10, 20] + (20, 30] + (30, 40] + (40, 50)
WHERE value >= 15 AND value <= 35(10, 20] + (20, 30] + (30, 40)
WHERE value >= 25 AND value <= 45(20, 30] + (30, 40] + (40, 50)

2.2 开区间范围查询

查询SQL具体锁定区间
WHERE value > 20 AND value < 40(20, 30] + (30, 40)
WHERE value > 15 AND value < 35(10, 20] + (20, 30] + (30, 40)
WHERE value > 25 AND value < 45(20, 30] + (30, 40] + (40, 50)

2.3 单边界范围查询

查询SQL锁定范围
WHERE value >= 30(20, 30] + (30, 40] + (40, 50] + (50, +∞)
WHERE value > 30(30, 40] + (40, 50] + (50, +∞)
WHERE value <= 30(-∞, 10] + (10, 20] + (20, 30] + (30, 40)
WHERE value < 30(-∞, 10] + (10, 20] + (20, 30)

三、特殊情况的间隙锁

3.1 空表的间隙锁

查询SQL锁定范围说明
SELECT * FROM empty_table WHERE value = 100 FOR UPDATE;(-∞, +∞)整个值域间隙
SELECT * FROM empty_table WHERE value > 50 FOR UPDATE;(-∞, +∞)整个值域间隙

3.2 只有一条记录的表

-- 假设只有一条记录:value = 100
查询SQL锁定范围说明
WHERE value = 50(-∞, 100)50不存在,锁定前间隙
WHERE value = 150(100, +∞)150不存在,锁定后间隙
WHERE value = 100(-∞, 100] + (100, +∞)存在,临键锁覆盖所有间隙

四、锁定范围的边界规则总结

规则说明示例
记录存在加临键锁 = 记录锁 + 间隙锁value=20(10,20] + (20,30)
记录不存在只加间隙锁value=25(20,30)
范围查询锁定所有可能插入影响结果的间隙value>20(20,30] + (30,40] + ...
边界保护查询边界外也要锁定相邻间隙20≤value≤40 → 还要锁(40,50)
http://www.dtcms.com/a/317023.html

相关文章:

  • lesson32:Pygame模块详解:从入门到实战的2D游戏开发指南
  • Python 3.13 预览版:颠覆性特性与实战指南
  • 项目设计模式草稿纸
  • 电感矩阵-信号完整性分析
  • ob数据库是什么
  • 二维数点问题2
  • 计算机视觉的四项基本任务辨析
  • HPE磁盘阵列管理01——MSA和SMU
  • OpenLayers学习(一)-基础
  • 赛灵思ZYNQ官方文档UG585自学翻译笔记:Quad-SPl Flash 闪存控制器
  • 《Python基础》第3期:使用PyCharm编写Hello World
  • 【力扣 Hot100】 刷题日记
  • linux定时器管理 timer_*系统调用及示例
  • LeetCode 112. 路径总和解题思路详解(BFS算法深入理解)
  • AI模型整合包上线!一键部署ComfyUI,2.19TB模型全解析
  • ES(Elasticsearch)进程掉线(节点脱离集群)问题
  • 协同过滤基础——基线预测器(Baseline Predictors)
  • 深入理解 Ext 系列文件系统:从磁盘物理到文件系统原理
  • QtPromise第三方库的介绍和使用
  • STM32学习笔记2-GPIO的输出模式
  • 宠智灵宠物AI大模型聚焦医疗核心场景,提升临床决策能力
  • Bilateral Reference for High-Resolution Dichotomous Image Segmentation
  • mmsegmentation·数据结构
  • 《零基础入门AI:传统机器学习进阶(从拟合概念到K-Means算法)》
  • 力扣刷题日常(15-16)
  • 深信服GO面试题及参考答案(下)
  • MCP与Function Calling
  • 三极管基本放大电路静态及动态参数计算
  • 【C++】类和对象2
  • nfs(网络文件系统)+autofs(自动挂载服务)