有关系,而且关系很紧。很多锁看起来复杂,本质上都是数据库为了实现不同隔离级别而使用的手段。
先抓住核心结论
隔离级别决定数据库要保护到什么程度,锁机制负责把这种保护真正执行出来。规矩是隔离级别定的,工具是锁提供的。
读已提交通常更克制
在读已提交下,数据库更关注“不要读到未提交数据”,因此锁范围通常更小,很多场景主要依赖记录锁,不会像可重复读那样积极地锁住范围。
可重复读为什么更容易出现范围锁
因为它要尽量避免同一事务里前后两次查询结果变化,所以遇到范围查询时,InnoDB 常会结合间隙锁和记录锁,也就是临键锁,去拦住可能插入的新记录。
是不是所有场景都会锁很大
也不是。比如走唯一索引等值查询时,数据库能更精确地定位目标,锁范围往往会缩小,并不一定每次都锁整段区间。
实际排查时怎么看
看 SQL 是否命中索引、是否是范围条件、当前事务隔离级别是什么。这三件事基本决定了锁会不会扩大。
正文完




