InnoDB 的锁机制

InnoDB 的锁机制是 MySQL 实现事务隔离数据一致性的关键组件。

锁的类型

共享锁(S锁)

  • 作用:允许事务读取一行数据,阻止其他事务获取相同行的排他锁。
  • 兼容性:多个事务可同时持有同一行的共享锁。
  • 使用场景:如 SELECT ... LOCK IN SHARE MODE 语句。

排它锁(X锁)

  • 作用:允许事务更新或删除数据,阻止其他事务对同一行加任何锁。
  • 兼容性:与其他锁(包括S/X锁)互斥。
  • 使用场景:如 UPDATEDELETESELECT ... FOR UPDATE 语句。

锁的粒度

行级锁

  • 直接锁定索引中的行记录,支持高并发。
  • 记录锁(Record Locks):锁住索引记录(即使表无索引,InnoDB会创建隐藏聚簇索引)。
  • 间隙锁(Gap Locks):锁定索引记录间的间隙,防止其他事务插入,仅作用于可重复读(RR)隔离级别。
  • 临键锁(Next-Key Locks):记录锁 + 间隙锁,锁定左开右闭区间,解决幻读(RR隔离级别默认)。

表级锁(表级意向锁)

  • 意向共享锁(IS):表示事务意图在表中某些行加S锁。
  • 意向排他锁(IX):表示事务意图在表中某些行加X锁。
  • 作用:快速判断表是否被锁定,避免逐行检查锁冲突。

自增锁

  • 针对自增列的特殊表级锁,确保自增ID连续且唯一。
  • 在语句执行完成后立即释放(非事务结束)。