| 按粒度 | 全局锁 | 锁定整个数据库实例,用于备份等操作 | FLUSH TABLES WITH READ LOCK |
| 表级锁 | 锁定整张表 | LOCK TABLES ... READ/WRITE |
| 元数据锁(MDL) | 防止表结构变更(DDL)与查询(DML)冲突 | 自动加锁(如ALTER TABLE时) |
| 意向锁(IS/IX) | 表示事务稍后可能对表中的某些行加共享锁(S)或排他锁(X) | SELECT ... FOR SHARE(IS) |
| 行级锁 | 锁定单行或索引记录 | SELECT ... FOR UPDATE(X锁) |
| 按操作类型 | 共享锁(S锁/读锁) | 允许其他事务读,但不允许修改 | SELECT ... LOCK IN SHARE MODE |
| 排他锁(X锁/写锁) | 禁止其他事务读或修改 | SELECT ... FOR UPDATE |
| 按性能 | 悲观锁 | 默认方式,先加锁再操作 | SELECT ... FOR UPDATE |
| 乐观锁 | 无锁机制,通过版本号控制 | 应用层实现(如version字段) |
| 行锁细分 | 记录锁(Record Lock) | 锁定索引记录(主键或唯一索引) | 自动加锁(如UPDATE某行) |
| 间隙锁(Gap Lock) | 锁定索引记录之间的间隙,防止幻读 | 自动加锁(RR隔离级别下) |
| 临键锁(Next-Key Lock) | 记录锁+间隙锁,锁定记录及前面的间隙 | 默认行锁方式(RR隔离级别) |
| 插入意向锁 | 特殊的间隙锁,允许不同事务在相同间隙插入不同数据 | 自动加锁(INSERT时) |