请列举 MySQL 中存在的锁类型,并简要说明各自的使用场景或作用。
考察说明
考查候选人对 MySQL 锁机制的分类和基本原理的掌握程度。
回答思路
- 【回答框架 1】MySQL 锁可从多个维度分类。按粒度可分为全局锁、表级锁(如表锁、元数据锁)和行级锁(如记录锁、间隙锁、临键锁),不同粒度影响并发度与锁开销。
- 【回答框架 2】按读写性质可分为共享锁(S 锁)和排他锁(X 锁),S 锁之间兼容,S 与 X、X 与 X 互斥。
- 【回答框架 3】按实现机制还可分为悲观锁(数据库锁机制实现)与乐观锁(通过版本号或条件更新实现)。
- 【回答框架 4】对于表级锁,可提及 MyISAM 主要使用表锁,InnoDB 支持行锁,以及意向锁用于协调表锁与行锁。
- 【回答框架 5】对于行级锁,可说明 InnoDB 中记录锁锁住索引记录,间隙锁锁住记录间空隙,临键锁为记录锁和间隙锁的组合,用于解决幻读问题。
- 【关键点 1】MySQL 锁按粒度分全局锁、表级锁、行级锁。
- 【关键点 2】共享锁与排他锁用于控制并发读写。
- 【关键点 3】InnoDB 行锁包括记录锁、间隙锁、临键锁。
- 【关键点 4】意向锁用于表锁与行锁的协调。
- 【关键点 5】乐观锁通过版本控制实现,适用于并发冲突较少的场景。
- 【易错点 1】不能混淆表锁与行锁的实际支持引擎,MyISAM 只支持表锁,InnoDB 支持行锁。
- 【易错点 2】间隙锁主要存在于可重复读隔离级别下,用于防止幻读,不是所有事务隔离级别都默认加间隙锁。
- 【易错点 3】临键锁是记录锁与间隙锁的组合,不是独立的新锁类型,容易误以为是三种独立锁。