首页/数据/数据库速查/RC 与 RR 的锁行为差异与选型
性能与调优57 条

RC 与 RR 的锁行为差异与选型

READ COMMITTED 与 REPEATABLE READ 的核心差异在间隙锁:RC 基本不用 gap lock(减少锁冲突),RR(默认)用临键锁防幻读;互联网 OLTP 常用 RC。

数据库速查数据更新于 2026-10-12

对比

行为RCRR
间隙锁基本不使用大量使用(范围条件)
幻读可能出现由临键锁防住
半一致性读支持(UPDATE 先读最新)不支持
锁冲突较低较高

切换(谨慎评估)

切换(谨慎评估)
SELECT @@transaction_isolation;
SET GLOBAL transaction_isolation = 'READ-COMMITTED';
-- 仅影响新连接;binlog_format=ROW 是前提
RC 下需要显式处理「读-改-写」竞态(SELECT ... FOR UPDATE),别把 RR 的隐式保护带过去。

易错点

  • 从 RR 切 RC 不评估业务:依赖可重复读的批次逻辑出现数据漂移
  • 以为 RC 没任何间隙锁:外键检查与唯一键冲突场景仍有 gap 锁

数据来源与参考

  • MySQL 8.0 Reference Manual: Transaction Isolation Levels
  • MySQL 8.0 Reference Manual: InnoDB Locking

相关工具

​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌