行为示例
行为示例
-- 索引 (user_id),RR 隔离级别
BEGIN;
SELECT * FROM appdb.orders WHERE user_id = 100 FOR UPDATE;
-- user_id=100:命中记录 + 相邻间隙被锁
-- 另一事务 INSERT user_id=100 的行 => 阻塞
-- 无索引条件 => 全表记录+间隙都被锁(伪表锁效果)| 锁范围 | 命中记录 + 前方间隙(到下一记录) |
|---|---|
| 退化 | 唯一索引等值命中 → 仅记录锁 |
| 开关 | RC 级别下关闭大部分 gap 行为 |
gap lock 只在 RR 及以上且「当前读」(FOR UPDATE / 更新)时出现;快照读不加行锁。