MySQL 中的锁机制分为行级锁和表级锁,不同存储引擎对锁的支持和实现方式有所不同。
-
表级锁:
-
适用引擎: MyISAM、MEMORY、MERGE等。
-
特点: 粒度较粗,锁住整个表。
-
使用场景: 主要用于针对当前会话,不支持事务。
-
锁类型:
- S锁(共享锁)和X锁(排他锁)。
- IS锁和IX锁(用于辅助判断表中是否有已经被加锁的记录,避免遍历判断)。
- AUTO-INC锁(用于处理AUTO_INCREMENT列的递增值,避免并发时插入记录的冲突)。
-
-
行级锁:
-
适用引擎: InnoDB。
-
特点: 支持细粒度的锁,可以实现更精准的并发控制。
-
锁类型:
- Record Locks:S锁和X锁,用于保护记录。
- Gap Locks:用于阻止其他事务在记录之间的间隙插入新记录。
- Next-Key Locks:结合了Record Locks和Gap Locks,同时锁住某条记录和阻止其他事务在记录前边的间隙插入新记录。
- Insert Intention Locks:用于在插入记录时判断插入位置是否被其他事务加了gap锁,避免冲突。
-
在选择锁的类型时,需要根据具体业务场景和需求来决定,权衡锁的粒度、性能开销以及并发控制的要求。 InnoDB 的行级锁提供了更灵活、精准的并发控制,但也需要谨慎使用,避免死锁和性能问题。