MySQL 提供了多种锁机制来保证数据并发访问的一致性和完整性。以下是 MySQL 中主要的锁类型及其特点:
一、按锁的粒度分类
1. 全局锁
- 锁定范围:整个数据库实例
- 命令:
FLUSH TABLES WITH READ LOCK
(FTWRL) - 特点:
- 使数据库处于只读状态
- 阻塞所有写操作和部分读操作
- 应用场景:全库逻辑备份
2. 表级锁
- 锁定范围:整张表
- 类型:
- 表锁:
- 命令:
LOCK TABLES ... READ/WRITE
- 特点:开销小,加锁快;并发度低
- 命令:
- 元数据锁(MDL):
- 自动加锁,无需显式命令
- 访问表时自动加MDL读锁,修改表结构时加MDL写锁
- 表锁:
- 应用场景:表结构变更、全表操作
3. 行级锁
- 锁定范围:单行或多行记录
- 实现引擎:In