当前位置: 首页 > news >正文

针对主键索引的 for update 操作有什么用

针对主键索引的 for update 操作有什么用

针对主键索引使用FOR UPDATE操作,是 MySQL 高并发编程中保证数据一致性和提升系统性能的核心手段。它的主要作用可以总结为以下三点:

1. 施加排他锁,保证数据强一致性
SELECT ... FOR UPDATE会在事务中为查询到的行加上排他锁(X锁)。这意味着在当前事务提交或回滚之前,其他任何事务都无法修改这些行,也无法对这些行再次加锁(比如执行其他的FOR UPDATE)。这能有效防止在复杂的业务逻辑(如转账、扣库存)中,因并发操作导致的数据被意外篡改或覆盖。

2. 精准的行级锁定,最大化并发性能
这是针对主键索引最核心的优势。InnoDB 的行级锁是加在索引上的。当你明确使用主键(或唯一索引)进行等值查询时,MySQL 能够精准定位到具体的某一行,并只对该行加锁(即行锁)。

  • 好处:锁的粒度极小,不会波及表中的其他数据。其他事务依然可以自由地读取或修改表里的其他行,系统的并发处理能力极高。
  • 对比:如果FOR UPDATE的查询条件没有走索引(例如对普通字段全表扫描),InnoDB 找不到具体的索引记录,就会退化为锁定整张表(表锁),导致所有其他操作都被阻塞,严重拖垮系统性能。

3. 优化锁的算法,减少不必要的锁定范围
在 MySQL 默认的“可重复读(RR)”隔离级别下,普通的范围查询往往会触发“间隙锁(Gap Lock)”或“临键锁(Next-Key Lock)”,把查询条件前后的“间隙”也锁住,以防止幻读。
但是,针对主键的等值查询(例如WHERE id = 100)是一个特例。因为主键具有唯一性约束,InnoDB 能够明确知道只会命中这一条记录,因此它会进行锁算法优化,只加最基础的记录锁(Record Lock),而不会加间隙锁。这进一步缩小了锁定的范围,避免了阻塞其他事务在该主键值附近插入新数据。


📌 经典实战场景:银行转账
假设你需要从账户 A 转账 100 元给账户 B,为了防止在扣款和入账的间隙,账户 A 的钱被其他线程同时扣走(导致透支),通常会这样写:

STARTTRANSACTION;-- 锁定账户A,确保余额在计算期间不会被其他事务修改SELECTbalanceFROMaccountWHEREuser_id=1001FORUPDATE;-- (业务代码检查余额是否充足...)UPDATEaccountSETbalance=balance-100WHEREuser_id=1001;-- 锁定账户B,进行入账UPDATEaccountSETbalance=balance+100WHEREuser_id=1002;COMMIT;

在这个例子中,如果user_id是主键,那么这两个账户的行会被精准锁定,而不会影响其他用户的正常转账操作。


锁用不好容易死锁,需要我讲讲怎么避免和排查死锁吗?

http://www.jsqmd.com/news/838150/

相关文章:

  • 2026 包头财税企业管理咨询,纳税合规计划,公司注销全面评测,公司注册靠谱商家 TOP8 推荐 - 品牌优企推荐
  • 树莓派Boot分区扩容:实现跨平台数据交换的实用方案
  • 2026 AI 思维导图工具实测推荐:从自动生成到知识整理,5款工具横向测评
  • 2026年,威海靠谱的专业除甲醛公司哪家强?答案即将揭晓! - 得意的笑125
  • PCL2启动器网络异常?3步排查解决“对象未引用“错误
  • DEAL算法:量子优化在噪声环境下的突破与应用
  • 黄金回收报价差距从何而来?南京五家门店实测拆解缘由 - 奢侈品回收测评
  • 开源阅读鸿蒙版终极指南:打造你的专属数字图书馆
  • 石家庄老板注意!戴假表谈生意丢人,二手名表支持专柜验货 - 奢侈品回收测评
  • 深度解析:如何将Obsidian笔记库转化为私有AI知识库
  • TensorRT插件初始化:从序列化错误到动态注册的实战解析
  • 如何用UniRig实现3D角色智能骨骼绑定:终极自动化解决方案
  • 2026 包头财税公司注销,股权设计,乱账整理深度优选,代理记账本地服务平台八大排行 - 品牌优企推荐
  • 北京诚信个人社保代缴服务商实测排行及核心维度对比 - 奔跑123
  • Java面试必背|volatile关键字深度拆解(不只会基础,面试直接碾压面试官)
  • Seraphine终极指南:英雄联盟LCU API实战开发与智能BP系统深度解析
  • 目前酒店厨房设备订购哪家可靠 - 速递信息
  • 2026年运动塑胶地板厂家推荐:同质透心塑胶地板/PVC塑胶地板/塑胶地板片材专业供应 - 品牌推荐官
  • 从ONNX到RKNN:在RK3588 NPU上部署模型的完整实践
  • 2026年磁力加热搅拌器公司推荐榜:从国产实力厂家到国际知名品牌 - 品牌推荐大师1
  • 基于规则与启发式的Claude对话内容自动Markdown格式化工具实现
  • DPU异构计算架构解析:KPU如何重塑数据中心算力格局
  • 【往届已检索、JPCS出版】第十一届能源科学与化学工程国际学术研讨会 (ISESCE 2026) - 爱写稿的小帅哥
  • Windows和Office智能激活终极指南:三步永久激活的完整教程
  • 晋堂书院书法艺考培训怎么样?17年实战经验+体系化教学背后的真实评测 - 奔跑123
  • Visual C++运行库终极指南:如何3分钟解决Windows软件启动失败问题
  • 学Simulink——光伏储能系统双向DC-AC逆变器恒功率控制(PQ控制)仿真
  • 2026 包头财税公司注册,乱账整理,纳税合规计划人气推荐,公司注销正规机构 TOP10 评测 - 品牌优企推荐
  • 2026年山东丰田海狮克穆勒阿尔法:专业厂家如何脱颖而出 - 品牌企业推荐师(官方)
  • 从碎片化到知识体系:微信读书笔记助手如何重塑你的数字阅读体验