mysql表锁和行锁有什么区别?mysql锁粒度对比详解

来源:建站作者:上海SEO公司头衔:草根站长
导读:本期聚焦于小伙伴创作的《mysql表锁和行锁有什么区别?mysql锁粒度对比详解》,敬请观看详情,探索知识的价值。以下视频、文章将为您系统阐述其核心内容与价值。如果您觉得《mysql表锁和行锁有什么区别?mysql锁粒度对比详解》有用,将其分享出去将是对创作者最好的鼓励。

mysql的锁机制按照锁粒度划分,主要分为表锁和行锁两类,两者的核心差异体现在作用范围、开销、并发能力等多个方面,不同存储引擎对这两类锁的支持情况也存在区别。

mysql表锁和行锁的核心区别

表锁和行锁最根本的差异是锁的作用范围不同,这也导致了两者在其他特性上的诸多不同,具体对比如下:

对比维度表锁行锁
作用范围锁定整张表,表内所有数据行都会被限制访问只锁定操作涉及的单条或多条数据行,其他行不受影响
加锁开销开销小,加锁速度快开销大,加锁速度慢,需要维护锁的持有状态
死锁概率不会出现死锁高并发场景下可能出现死锁
并发性能并发度低,同一时间只能有一个会话对表进行写操作并发度高,不同会话操作不同行时互不干扰
支持引擎MyISAM、InnoDB都支持仅InnoDB支持

表锁的使用场景与示例

表锁更适合以查询为主、写操作较少的场景,或者需要批量操作整张表的情况,MyISAM引擎默认就会给写操作加表锁。

表锁的加锁语法

手动给表加读锁和写锁的语法如下:

-- 给user表加读锁,当前会话和其他会话都只能读该表,当前会话写该表会报错,其他会话写会阻塞
LOCK TABLES user READ;

-- 给user表加写锁,当前会话可以对表进行读写,其他会话的读写操作都会阻塞
LOCK TABLES user WRITE;

-- 释放所有表锁
UNLOCK TABLES;

表锁的特点说明

读锁是共享锁,多个会话可以同时持有同一张表的读锁,不会互相阻塞;写锁是排他锁,同一时间只能有一个会话持有表的写锁,且写锁优先级高于读锁,如果有会话在等待写锁,新的读锁请求会被阻塞直到写锁释放。

行锁的使用场景与示例

行锁更适合写操作频繁、高并发的场景,InnoDB引擎默认使用行锁,行锁是基于索引实现的,如果操作没有命中索引,行锁会升级为表锁。

行锁的加锁语法

InnoDB的行锁通常在事务中自动加锁,也可以通过FOR UPDATE手动加排他行锁:

-- 开启事务
START TRANSACTION;

-- 查询id为1的用户数据并加排他行锁,其他事务无法修改这条数据直到当前事务提交
SELECT * FROM user WHERE id = 1 FOR UPDATE;

-- 提交事务,释放行锁
COMMIT;

行锁的注意事项

  • 行锁必须基于索引才能生效,如果WHERE条件没有使用索引,InnoDB会进行全表扫描,此时行锁会升级为表锁,失去行锁的高并发优势。
  • 行锁的加锁和解锁是在事务提交时完成的,事务越长,行锁持有时间越久,越容易出现锁冲突和死锁。
  • InnoDB还支持意向锁,是表级锁,用来标识事务即将对表中的行加锁,避免表锁和行锁的冲突检查开销。

如何选择表锁和行锁

实际业务中可以根据以下原则选择:

  • 如果业务以大量查询为主,写操作很少,或者使用的是MyISAM引擎,优先选择表锁。
  • 如果业务写操作频繁,并发量高,且使用的是InnoDB引擎,优先选择行锁,同时要保证操作的WHERE条件命中索引,避免行锁升级为表锁。
  • 如果需要批量操作整张表的数据,并且操作时间较长,可以考虑手动加表锁,避免操作过程中数据被其他会话修改。
注意:mysql的锁机制还有页锁、间隙锁等其他类型,本文仅对比最常用的表锁和行锁,实际使用中还需要结合具体的业务场景和存储引擎特性做选择。

mysql表锁行锁锁粒度InnoDB修改时间:2026-06-20 20:57:22

免责声明:​ 已尽一切努力确保本网站所含信息的准确性。网站内容多为原创整理与精心编撰,观点力求客观中立。本站旨在免费分享,内容仅供个人学习、研究或参考使用。若引用了第三方作品,版权归原作者所有。如内容涉及您的权益,请联系我们处理。
内容垂直聚焦
专注技术核心技术栏目,确保每篇文章深度聚焦于实用技能。从代码技巧到架构设计,为用户提供无干扰的纯技术知识沉淀,精准满足专业提升需求。
知识结构清晰
覆盖从开发到部署的全链路。AI、前端、编程、数据库、服务器、建站、系统层层递进,构建清晰学习路径,帮助用户系统化掌握开发与运维所需的核心技术。
深度技术解析
拒绝泛泛而谈,深入技术细节与实践难点。无论是数据库优化还是服务器配置,均结合真实场景与代码示例进行剖析,致力于提供可直接应用于工作的解决方案。
专业领域覆盖
精准对应开发生命周期。从前端界面到后端编程,从数据库操作到服务器运维,形成完整闭环,一站式满足全栈工程师和运维人员的技术需求。
即学即用高效
内容强调实操性,步骤清晰、代码完整。用户可根据教程直接复现和应用于自身项目,显著缩短从学习到实践的距离,快速解决开发中的具体问题。
持续更新保障
专注既定技术方向进行长期、稳定的内容输出。确保各栏目技术文章持续更新迭代,紧跟主流技术发展趋势,为用户提供经久不衰的学习价值。