MySQL 中的锁机制

41 阅读1分钟

MySQL 中的锁机制分为行级锁和表级锁,不同存储引擎对锁的支持和实现方式有所不同。

  1. 表级锁

    • 适用引擎: MyISAM、MEMORY、MERGE等。

    • 特点: 粒度较粗,锁住整个表。

    • 使用场景: 主要用于针对当前会话,不支持事务。

    • 锁类型:

      • S锁(共享锁)和X锁(排他锁)。
      • IS锁和IX锁(用于辅助判断表中是否有已经被加锁的记录,避免遍历判断)。
      • AUTO-INC锁(用于处理AUTO_INCREMENT列的递增值,避免并发时插入记录的冲突)。
  2. 行级锁

    • 适用引擎: InnoDB。

    • 特点: 支持细粒度的锁,可以实现更精准的并发控制。

    • 锁类型:

      • Record Locks:S锁和X锁,用于保护记录。
      • Gap Locks:用于阻止其他事务在记录之间的间隙插入新记录。
      • Next-Key Locks:结合了Record Locks和Gap Locks,同时锁住某条记录和阻止其他事务在记录前边的间隙插入新记录。
      • Insert Intention Locks:用于在插入记录时判断插入位置是否被其他事务加了gap锁,避免冲突。

在选择锁的类型时,需要根据具体业务场景和需求来决定,权衡锁的粒度、性能开销以及并发控制的要求。 InnoDB 的行级锁提供了更灵活、精准的并发控制,但也需要谨慎使用,避免死锁和性能问题。