尧图网站建设 尧图网络
  • 首页
  • 关于我们
  • 服务项目
  • 案例展示
  • 建站流程
  • 资讯中心
  • 联系我们
首页/资讯中心/详情

一条mysql数据库更新语句

一条mysql数据库更新语句
📅 发布时间:2026/6/18 19:31:47

发生场景:车间产出记录进行出库

国庆节前下班的时候,生产部门生产完进行入库,这个时候正常跑我们的业务XXXX——直接到根据单件档案的单件号更新单件档案上的最终用户信息时候出现了问题,跑着跑着就超时,这个时候就进行问题排查

1、首先怀疑是大量数据操作时候怀疑是不是有锁表情况发生,但是跟踪了下数据库并没有发生锁表的现象
2、排除锁表情况,然后开始跟踪整个业务的sql,排查哪条sql出现了超时
3、最终排查到是一条更新语句,回写最终用户时候那条update 超时了,在执行到第51s时候出现等待超时nnodb_lock_wait_timeout

原因分析

先来看下这条更新的sql,其中使用了case when

<update id="updateSn">update a1<trim prefix="set" suffixOverrides=","><trim prefix="C01 =case" suffix="end,"><foreach collection="list" item="i" index="index"><if test="i.sn != null">when a1.sn = #{i.sn} then #{i.finalUser,jdbcType=VARCHAR}</if></foreach></trim><trim prefix="C02 =case" suffix="end,"><foreach collection="list" item="i" index="index"><if test="i.sn != null">when a1.sn = #{i.sn} then #{i.cpType,jdbcType=VARCHAR}</if></foreach></trim></trim>where a1.sn in<foreach collection="list" item="i" index="index" open="(" separator="," close=")">#{i.sn,jdbcType=VARCHAR}</foreach></update>

原因是list里面有上万条数据,就会造成如下情况

update a1
set C01 = case when a1.sn = 'SN001' then '张三' when a1.sn = 'SN002' then '李四' ......................end,C02 = case when a1.sn = 'SN001' then '类型A' when a1.sn = 'SN002' then '类型B' ......................end
where a1.sn in ('SN001', 'SN002',.........)

排查说明

从而造成的直接原因就是这条更新语句太过庞大,执行50s后依然没有能结束,那么就会出现超时的异常,原因是UPDATE 语句在执行时会对涉及的行 / 表加锁(InnoDB 引擎默认行级锁),如果其他事务已持有相关锁(如未提交的更新、删除操作),当前 UPDATE 会进入锁等待状态。当等待时间超过 innodb_lock_wait_timeout(默认 50 秒)时,就会触发超时(Lock wait timeout exceeded 错误)

select操作一般不会有这个情况,因为默认情况下(非 FOR UPDATE 或 LOCK IN SHARE MODE),InnoDB 使用快照读(借助 MVCC 机制),不会加锁,也不会等待其他事务释放锁,因此可以长时间运行而不触发锁等待超时

这个时候修改代码来不及,因为不能让系统重启,所以让业务部门减少数据量,分批操作。。。。方法可能比较笨,但是能保证业务顺利入库,进行后续操作

后续优化

数据量太大,分批次执行,每次1000条更新一次

这样写的有点

相关新闻

  • 浅谈递归入门(1) - 指南
  • python+uniapp基于微信小工具的医院陪诊预约系统
  • comfyui配置

最新新闻

  • PyCaret低代码实现房价预测:从数据准备到模型上线全链路
  • 【Springboot毕设全套源码+文档】基于springboot的智慧仓库(丰富项目+远程调试+讲解+定制)
  • 2026年6月PE排水管企业推荐指南 - 多才菠萝
  • 全维度测评报告:2026 杭州黄金回收报价套路拆解,称重、验金、扣费猫腻逐项核验 - 奢侈品回收评测
  • DSP56800到DSP56800E代码移植:AGU寄存器加载策略与兼容性问题详解
  • Python自动化测试实战:从Selenium到Pytest的完整技术栈解析

日新闻

  • 2026年不锈钢卷板厂家推荐排行榜:冷轧热轧/304/201不锈钢卷板,高颜值耐腐蚀源头厂家实力精选 - 企业推荐官【官方】
  • FLUX.1-dev FP8模型实战指南:24GB以下显卡高效部署方案
  • 2026佛山长途搬家价目表:跨省跨市搬家费用完整计算指南 - 从来都是英雄出少年

周新闻

  • 3步解锁iOS设备:applera1n激活锁绕过完全指南
  • 39 2026 人工智能证书终极盘点,普通人选 AI 证书可以从这些方向入手
  • Redis 暴露公网有多危险?从端口检查到补救步骤

月新闻

  • 【总结】入门篇:50句话让你记住架构核心概念
  • WeChatMsg技术方案解析:实现Mac微信数据自主管理的完整解决方案
  • WeChatMsg:革新性微信数据备份方案,打造你的专属数字记忆库

关于尧图

  • 公司简介
  • 团队介绍
  • 企业文化
  • 荣誉资质

服务项目

  • 定制开发
  • 电商建站
  • UI 设计
  • 运维服务

快速链接

  • 案例展示
  • 建站流程
  • 常见问题
  • 资讯中心

联系方式

  • 📍北京市朝阳区互联网产业园 A 座 10 层
  • 📞400-888-8888
  • ✉️contact@rkmt.cn
  • 🕐周一至周日 9:00-21:00

© 2024 北京尧图网络科技有限公司 版权所有 | 京 ICP 备 XXXXXXXX 号