MySQL锁机制
MySQL 锁机制全解析:类型、原理与实践
MySQL 的锁机制是保障并发场景下数据一致性的核心技术,通过合理的锁定策略协调多个事务对共享资源的访问。不同存储引擎的锁设计差异显著,理解锁的类型、粒度和算法,对优化并发性能、避免死锁至关重要。
锁的基本概念与作用
锁是数据库管理并发访问的规则,核心作用是控制多个事务对共享资源的有序访问,避免因并发操作导致的数据不一致(如脏读、不可重复读、幻读)。
- 核心流程:事务修改数据前需获取锁 → 持有锁期间独占或共享资源 → 事务提交 / 回滚后释放锁。
- 设计目标:在 “数据一致性” 和 “并发性能” 之间找到平衡 —— 锁粒度越细,并发越高但开销越大;粒度越粗,开销越小但并发越低。
按锁粒度分类(核心分类方式)
锁的粒度决定了锁定资源的范围,MySQL 支持表锁、行锁和页锁三种粒度,不同存储引擎对锁的支持不同。
表锁(Table Lock):粒度最大,偏读场景
表锁是锁定整张表的机制,实现简单、开销小、无死锁,但并发度低(适合读多写少场景)。
支持的存储引擎:
MyISAM、Memory、CSV 等非事务引擎(InnoDB 也支持表锁,但默认用行锁)。
核心特性:
- 开销小、加锁快:无需逐行判断,直接锁定整张表。
- 无死锁:锁定顺序简单,不会出现循环等待。
- 并发度低:写操作会阻塞所有读写,读操作会阻塞写操作。
锁类型与行为:
表锁分为读锁(共享锁,S 锁) 和写锁(排他锁,X 锁),规则如下:
