MySQL
- 分类
- 数据库
- 难度
- 未设置
- 来源数
- 1
- 更新时间
- 2026/03/29 00:57
答案
1. 唯一索引等值查询:存在则退化为记录锁,不存在则退化为间隙锁(如果遍历到了最后一条记录,则还是nk锁) 2. 唯一索引范围查询: 1. >、>=: 1. >全是nk锁 2. >=当值不存在时和>一样,值存在时,值的记录加上记录锁,后面都是next-key lock锁 2. <、<=: 1. 值不存在:边界是间隙锁,前边是next-lock锁 2. 值存在:<=边界是next-lock锁,<和值不存在一样 3. 非唯一索引等值查询: 1. 值不存在:添加间隙锁,两头是否能插入要根据主键判断,看插入位置的下一条记录是否持有间隙锁,有则无法插入 2. 值存在:值左边添加next-key lock,(对应主键添加记录锁),右边添加间隙锁。此时无法插入该查询值的记录(被nk和gap覆盖了) 4. 非唯一索引范围查询:全都用nk锁,不会退化(对应主键添加记录锁) 5. 没加索引查询:相当于全表扫描,每一条记录都会加nk锁
相关题目(5)
什么是热点 key,如何处理?共源 1
分布式系统Redis
watch dog 机制是什么?共源 1
分布式系统并发锁Redis
Redis 如何实现分布式锁?共源 1
分布式系统锁Redis
分布式系统并发Redis
元信息
审核状态: active
关联来源: 1
来源面经题(0)
这道题目前没有手动沉淀的面经题来源。
来源(1)
Java八股(数据库).md
knowledge_noteQuestion 49: MySQL是如何加行级锁的?
Source answer: 1. 唯一索引等值查询:存在则退化为记录锁,不存在则退化为间隙锁(如果遍历到了最后一条记录,则还是nk锁) 2. 唯一索引范围查询: 1. >、>=: 1. >全是nk锁 2. >=当值不存在时和>一样,值存在时,值的记录加上记录锁,后面都是next-key lock锁 2. <、<=: 1. 值不存在:边界是间隙锁,前边是next-lock锁 2. 值存在:<=边界是next-lock锁,<和值不存在一样 3. 非唯一索引等值查询: 1. 值不存在:添加间隙锁,两头是否能插入要根据主键判断,看插入位置的下一条记录是否持有间隙锁,有则无法插入 2. 值存在:值左边添加next-key lock,(对应主键添加记录锁),右边添加间隙锁。此时无法插入该查询值的记录(被nk和gap覆盖了) 4. 非唯一索引范围查询:全都用nk锁,不会退化(对应主键添加记录锁) 5. 没加索引查询:相当于全表扫描,每一条记录都会加nk锁
Reviewed answer: 加锁规则与索引类型、查询类型和是否命中记录有关。唯一索引等值查询可能退化为记录锁或间隙锁;唯一索引范围查询多为next-key lock;非唯一索引等值和范围查询通常涉及next-key lock与间隙锁;无索引查询相当于全表扫描,可能对每条记录加next-key lock。