mysql锁

按锁粒度:

全局锁(Global Lock)

FLUSH TABLES WITH READ LOCK;

-- 加锁 UNLOCK TABLES; -- 释放锁

表锁

  • ‌作用‌:锁定整张表,MyISAM默认使用,InnoDB在特定场景下也可用‌
  • ‌类型‌:
    • ‌共享锁 (S锁)‌:允许多个事务并发读,但禁止写‌
    • ‌排他锁 (X锁)‌:仅允许一个事务读写,其他事务完全阻塞‌

行锁

  • 记录锁 (Record Lock)‌:锁定索引记录‌。
  • ‌间隙锁 (Gap Lock)‌:锁定索引记录间的间隙,防止幻读‌
  • ‌临键锁 (Next-Key Lock)‌:记录锁 + 间隙锁,用于可重复读隔离级别‌

其它特殊锁:

  1. ‌意向锁 (Intention Lock)‌

    • ‌作用‌:表级锁,用于协调行锁与表锁的关系,分为意向共享锁(IS)和意向排他锁(IX)
  2. ‌元数据锁 (Metadata Lock, MDL)‌

    • ‌作用‌:保护表结构(DDL操作)不被并发修改,例如修改表结构时阻塞其他事务的DML操作‌
  3. ‌自增锁 (Auto-Increment Lock)‌

    • ‌作用‌:保证自增字段的唯一性,插入操作时自动加锁‌
  4. ‌插入意向锁 (Insert Intention Lock)‌

    • ‌作用‌:标记事务打算在某个间隙插入记录,允许共享读但阻止排他写‌

按操作类型划分 ‌

共享锁(S锁)‌ 允许多事务并发读,但阻塞写操作,如SELECT ... LOCK IN SHARE MODE。 ‌

排他锁(X锁)‌ 独占锁,阻塞其他事务的读写,如UPDATE/DELETE默认加X锁。

 

锁的释放时机

事务提交(COMMIT)或回滚(ROLLBACK)时释放。

MySQL 8.0新增NOWAIT和SKIP NOWAIT语法可跳过锁等待。

NOWAIT:获取不到锁立即返回失败

SKIP NOWAIT:获取不到锁跳过锁

 

posted on 2025-04-21 14:26  Hi Martin  阅读(9)  评论(0)    收藏  举报