mysql锁
按锁粒度:
全局锁(Global Lock)
FLUSH TABLES WITH READ LOCK;
-- 加锁 UNLOCK TABLES; -- 释放锁
表锁
- 作用:锁定整张表,MyISAM默认使用,InnoDB在特定场景下也可用。
- 类型:
- 共享锁 (S锁):允许多个事务并发读,但禁止写。
- 排他锁 (X锁):仅允许一个事务读写,其他事务完全阻塞。
行锁
- 记录锁 (Record Lock):锁定索引记录。
- 间隙锁 (Gap Lock):锁定索引记录间的间隙,防止幻读。
- 临键锁 (Next-Key Lock):记录锁 + 间隙锁,用于可重复读隔离级别。
其它特殊锁:
-
意向锁 (Intention Lock)
- 作用:表级锁,用于协调行锁与表锁的关系,分为意向共享锁(IS)和意向排他锁(IX)。
-
元数据锁 (Metadata Lock, MDL)
- 作用:保护表结构(DDL操作)不被并发修改,例如修改表结构时阻塞其他事务的DML操作。
-
自增锁 (Auto-Increment Lock)
- 作用:保证自增字段的唯一性,插入操作时自动加锁。
-
插入意向锁 (Insert Intention Lock)
- 作用:标记事务打算在某个间隙插入记录,允许共享读但阻止排他写。
按操作类型划分
共享锁(S锁) 允许多事务并发读,但阻塞写操作,如SELECT ... LOCK IN SHARE MODE。
排他锁(X锁) 独占锁,阻塞其他事务的读写,如UPDATE/DELETE默认加X锁。
锁的释放时机
事务提交(COMMIT)或回滚(ROLLBACK)时释放。
MySQL 8.0新增NOWAIT和SKIP NOWAIT语法可跳过锁等待。
NOWAIT:获取不到锁立即返回失败
SKIP NOWAIT:获取不到锁跳过锁
浙公网安备 33010602011771号