贝利信息

mysql锁有哪些类型_mysql锁分类解析

日期:2026-01-05 00:00 / 作者:P粉602998670
MySQL锁是分层多维的并发控制机制,按粒度分表锁、行锁、间隙锁,按行为分S/X/IS/IX锁,按逻辑分悲观与乐观锁,MVCC提供快照读;常见问题源于隔离级别、索引缺失或事务使用不当。

MySQL锁不是一种锁,而是一套分层、多维、按需启用的并发控制机制;实际开发中你遇到的“卡住”“死锁”“查不到最新数据”,几乎都和它有关。

按粒度分:表锁、行锁、间隙锁,别乱用

粒度决定并发能力——越细越快,但也越难管。

按行为分:S锁、X锁、IS/IX锁,必须懂意向锁的作用

你写 SELECT ... FOR UPDATE 加的是 X 锁,但 InnoDB 实际上先申请 IX 表级意向锁——这是为了快速判断“这张表有没有人正在改行”,避免每次加行锁都扫全表。

按实现逻辑分:悲观锁 vs 乐观锁,别拿 version 字段硬套 InnoDB

InnoDB 的行锁是典型的悲观锁实现;而所谓“乐观锁”,MySQL 本身不提供原生命令,version 字段方案是你自己在应用层写的逻辑,数据库只负责执行 UPDATE ... WHERE version = ? 并返回影响行数。

实战中最容易踩的三个坑

很多“锁表现异常”,其实不是锁错了,而是没看清隔离级别、索引状态或事务边界。

锁不是配置项,是执行路径的副产品;真正要盯的,永远是那条 SQL 走不走索引、跑在什么隔离级别、包没包在事务里。