MySQL批量更新的常用实践

这篇具有很好参考价值的文章主要介绍了MySQL批量更新的常用实践。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

MySQL批量更新的常用实践

批量更新一般在批处理系统或者定时任务中比较常见,常见的诉求就是对表中多条数据进行更新(待更新的值是不一样的,这个区别于update … where in(…))

1.利用case … when … 方式批量更新

特点:适合数据量小的更新,数据量大时可能会产生间隙锁,甚至表锁,会影响性能,这个需要留意

常见的sql脚本如下:

UPDATE t_demo_audit_order SET
 prod_no = CASE id WHEN 1 THEN 'C1' WHEN 2 THEN 'C2' WHEN 3 THEN 'C3' WHEN 4 THEN 'C4' END,
 busi_no = CASE id WHEN 1 THEN 'B1' WHEN 2 THEN 'B2' WHEN 3 THEN 'B3' WHEN 4 THEN 'B4' END
WHERE id IN (1, 2, 3, 4)

mybatis动态拼接的sql脚本如下:

<update id="batchUpdateByPrimaryKey" parameterType="java.util.List">
        update t_demo_audit_order set
        prod_no = case id
        <foreach collection="list" item="item">
            when #{item.id} then #{item.prodNo}
        </foreach>
        end,
        busi_no = case id
        <foreach collection="list" item="item">
            when #{item.id} then #{item.busiNo}
        </foreach>
        end
        where id in
        <foreach collection="list" item="item" open="(" separator="," close=")">
            #{item.id}
        </foreach>
    </update>

2.批量执行单条update语句

特点:可以充分利用索引,有较好的性能;

注意:sql的大小不能超过数据库的限制,否则会失败。一个批次最大可以执行多少条update语句,这个没有绝对的数据,需要依据自己的表结构及数据量在测试环境进行
尝试,找到最佳数量。比如你可以依次执行1000条,2000条,3000条,然后对比性能即可选出理想的数量

ps: 数据库连接配置需要增加参数 allowMultiQueries=true

MySQL批量更新的常用实践

sql脚本如下:

update demo_record set test_order_no = 'bar01', test_dt = 'xxx' where id = 1 ; 
update demo_record set test_order_no = 'bar02', test_dt = 'xxx' where id = 2 ;
update demo_record set test_order_no = 'bar03', test_dt = 'xxx' where id = 3 ;
update demo_record set test_order_no = 'bar04', test_dt = 'xxx' where id = 4 ;
update demo_record set test_order_no = 'bar05', test_dt = 'xxx' where id = 5 ;
update demo_record set test_order_no = 'bar05', test_dt = 'xxx' where id = 6 ;
......

mybatis动态拼接的sql脚本如下:

<update id="batchUpdateByPrimaryKey"  parameterType="java.util.List">
    <foreach collection="list" item="item" open="" close="" separator=";">
        update demo_record set
        test_order_no = #{item.testOrderNo},
        test_dt = #{item.testDt}
        where id = #{item.id}
    </foreach>
</update>

之前处理的一个需求,满足自己的业务需求即可,sql耗时如下:
MySQL批量更新的常用实践文章来源地址https://www.toymoban.com/news/detail-415366.html

到了这里,关于MySQL批量更新的常用实践的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包赞助服务器费用

相关文章

  • Python量化投资——金融数据最佳实践: 使用qteasy+tushare搭建本地金融数据仓库并定期批量更新【附源码】

    Python量化投资——金融数据最佳实践: 使用qteasy+tushare搭建本地金融数据仓库并定期批量更新【附源码】

    做量化投资或者对量化交易感兴趣的朋友应该都需要用到大量的金融数据,例如股票价格,基金净值、上市公司技术指标和财务指标等等。但是,如何有效、可靠地获取金融数据,并且有效地使用,却是一个令人头疼的问题。在这篇文章中,我想跟大家交流我的使用心得,分

    2024年02月04日
    浏览(10)
  • Mysql 实现批量插入对已存在数据忽略或更新

    Mysql 实现批量插入对已存在数据忽略或更新

    对已存在的数据进行 忽略/更新 ,需要唯一索引/主键。 唯一索引可为多个字段的联合索引,比如根据我提供的sql中,我需要``name + age`不重复,则可把这2个字段联合创建为唯一索引 创建联合唯一索引的sql 批量插入对已存在数据忽略 批量插入对已存在数据更新 笔者这里只举

    2024年02月15日
    浏览(12)
  • 新的开始(开始更新笔记)

    首先感谢关注我的小伙伴,以后在求职或者选择方向的时候,感觉迷茫的时候,可以加我聊聊。 一路走来,跌跌撞撞,磕磕碰碰,经历了很多,记得上一次的更新笔记还是2021年。 首先说一下我的经历: 在本科期间,读的专业是软件工程专业,那时看来本来是一个很香的专业

    2024年02月12日
    浏览(12)
  • 未适应新的安全威胁情报:新的安全威胁情报未用于指导防火墙策略的更新

    未适应新的安全威胁情报:新的安全威胁情报未用于指导防火墙策略的更新

    近年来随着网络攻击手段不断升级,传统的网络安全防护措施已不再足以应对新型的安全挑战. 为了保障网络安全和提高防护效果我们需要及时了解和掌握最新的安全风险信息并运用到防火墙的策略制定中以提高整体安全性. 然而现实中情况并非如此很多组织未能有效运用最新

    2024年02月03日
    浏览(25)
  • Flutter状态管理新的实践 | 京东云技术团队

    Flutter状态管理新的实践 | 京东云技术团队

    1.1 声明式ui 声明式UI其实并不是近几年的新技术,但是近几年声明式UI框架非常的火热。单说移动端,跨平台方案有:RN、Flutter。iOS原生有:SwiftUI。android原生有:compose。可以看到声明式UI是以后的前端发展趋势。而状态管理是声明式UI框架的重要组成部分。 1.2 声明式UI框架的

    2024年02月10日
    浏览(32)
  • Java8 实现批量插入和更新,SpringBoot实现批量插入和更新,Mybatis实现批量插入和更新

    基于mybatis实现的批量插入和更新 由于直接执行批量所有数据可能会出现长度超出报错问题,使用如下方式即可解决 原理还是分配执行,这里的100就是设定每次执行最大数 这里使用插入作为例子,也可以使用批量更新 更新的写法

    2024年02月12日
    浏览(17)
  • uniapp:实现手机端APP登录强制更新,从本地服务器下载新的apk更新,并使用WebSocket,实时强制在线用户更新

    uniapp:实现手机端APP登录强制更新,从本地服务器下载新的apk更新,并使用WebSocket,实时强制在线用户更新

    实现登录即更新,或实时监听更新 本文介绍的是在 App打开启动 的时候调用更新,点击下方链接,查看使用 WebSocket 实现 实时 通知 在线用户 更新。 uniapp:全局消息是推送,实现app在线更新,WebSocket,apk上传: 背景 :内部手持机app开发功能,需要更新的到车间各个手持机上。

    2024年02月03日
    浏览(12)
  • AI绘画新的变现机会来了,Midjourney角色一致性重磅更新

    AI绘画新的变现机会来了,Midjourney角色一致性重磅更新

    文章底部准备了变现方法和粉丝福利,看完后可免费领取! 一、功能更新介绍 昨天Midjourney发布了“角色一致性”算法,就是根据参考图,生成一致的面孔、发型甚至跨风格和场景的服装图像。\\\"cref\\\"简直可以说是换装不换脸,类似于换脸插件。而且原图面部可以是多角度,与

    2024年04月17日
    浏览(11)
  • Mybatis之批量更新数据(批量update)

    Mybatis之批量更新数据(批量update)

    前言 当我们使用mybatis的时候,可能经常会碰到一批数据的批量更新问题,因为如果一条数据一更新,那每一条数据就需要涉及到一次数据库的操作,包括网络IO以及磁盘IO,可想而知,这个效率是非常低下的。而平时我们很少直接使用原生jdbc直接操作数据库,而是会使用比较

    2024年02月11日
    浏览(13)
  • Mybatis 中传入List实现 批量插入、批量更新、批量删除

    Mybatis 中传入List实现 批量插入、批量更新、批量删除

    个人收藏使用 文章来自Mybatis 中传入List实现 批量插入、批量更新、批量删除 - chelsey3tsf - 博客园 (cnblogs.com) 1. 批量插入 : Mapper层: 对应的mapper.xml: 如果List数据量比较大,可以考虑将List分批次插入 2. 批量更新: 批量更新只提供更新单个字段的,因为更新多个字段无论哪种

    2024年02月11日
    浏览(14)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包