MySql几十万条数据,同时新增或者修改

项目场景:

十万条甚至更多的数据新增或者修改


问题描述

现在有十万条数据甚至更多数据,在这些数据中,有部分数据存在数据库中,有部分数据确是新数据,存在的数据需要更新,不存在的数据需要新增


原因分析:

几十万的数据有新增,有修改,我们肯定不能去每条都要去数据库查询验证是否存在,这样数据库也扛不住


解决方案:

提示:有两种解决方案简单记录下,在mybatis中使用的场景

1、第一种解决方式,使用on duplicate key update,主键重复去修改,不重复就新增这里的order_id就是主键

java 复制代码
<insert id="addOrUpdateKryOrderMst" parameterType="list">
        insert into ${schema}.me_kry_order_mst
        (`order_id`,
         `trade_no`,
         `trade_type`,
         `trade_status`,
         `order_time`,
         `check_out_time`,
         `source`,
         `source_name`,
         `received_amount`,
         `cust_real_pay`,
         `trade_amount`,
         `privilege_amount`)
        values
        <foreach collection="kryOrderMstParam" item="item" separator=",">
            (#{item.orderId}, #{item.tradeNo}, #{item.tradeType}, #{item.tradeStatus}, #{item.orderTime}, #{item.checkOutTime}, #{item.source}, #{item.sourceName}, #{item.receivedAmount}, #{item.custRealPay}, #{item.tradeAmount}, #{item.privilegeAmount})
        </foreach>
        on duplicate key update
                             trade_no =
                         values (trade_no), trade_type =
                         values (trade_type), trade_status =
                         values (trade_status), order_time =
                         values (order_time), check_out_time =
                         values (check_out_time), `source` =
                         values (`source`), source_name =
                         values (source_name), received_amount =
                         values (received_amount), cust_real_pay =
                         values (cust_real_pay), trade_amount =
                         values (trade_amount), privilege_amount =
                         values (trade_amount)
    </insert>

2、第二种解决方式,使用replace into,若是主键存在就删除重新新增一条

java 复制代码
    <insert id="addOrUpdateKryOrderMst" parameterType="list">
        replace into ${schema}.me_kry_order_mst
        (`order_id`,
         `trade_no`,
         `trade_type`,
         `trade_status`,
         `order_time`,
         `check_out_time`,
         `source`,
         `source_name`,
         `received_amount`,
         `cust_real_pay`,
         `trade_amount`,
         `privilege_amount`)
        values
        <foreach collection="kryOrderMstParam" item="item" separator=",">
            (#{item.orderId}, #{item.tradeNo}, #{item.tradeType}, #{item.tradeStatus}, #{item.orderTime}, #{item.checkOutTime}, #{item.source}, #{item.sourceName}, #{item.receivedAmount}, #{item.custRealPay}, #{item.tradeAmount}, #{item.privilegeAmount})
        </foreach>
    </insert>

写的不好,请各位看官多多担待,勿喷谢谢,有需要补充请留言!

相关推荐
咩咩啃树皮4 小时前
第40篇:Vue3组件化开发精讲——组件拆分、复用、父子通信、工程化架构
java·前端·架构
鱟鲥鳚4 小时前
Spring Boot 集成 LangChain4j:从模型调用到 Tool Calling(Demo版)
java·spring boot
广州灵眸科技有限公司5 小时前
xfce桌面触摸校准:基于灵眸科技EASY-EAl-Orin-Nano
数据库·windows·科技
大模型码小白5 小时前
【Python零基础教程】继承、多态与魔法函数:面向对象编程三大核心特性详解
java·大数据·开发语言·人工智能·python·ai编程
腾渊信息科技公司6 小时前
Spring Boot对接MES实战:视觉检测数据自动同步方案
java·人工智能·spring boot·后端·计算机视觉·ai·软件需求
Cloud云卷云舒7 小时前
云卷云舒:从Oracle/MySQL迁移到HaishanDB:迁移评估工具核心技术拆解
mysql·oracle·ai-native·haishandb·信创数据库替换
爱笑的源码基地7 小时前
高并发 Redis 缓存门诊HIS系统源码,含财务统计药房进销存
java·程序·门诊系统·诊所系统·云诊所源码
憧憬成为web高手7 小时前
皮卡丘靶场速通--sql 2
数据库·sql·mybatis
wuqingshun3141597 小时前
TCP超时重传机制是为了解决什么问题?
java
段一凡-华北理工大学7 小时前
向量数据库实战:选型、调优与落地~系列文章12:文本分块策略实战:chunk_size 怎么选?重叠多少?
开发语言·数据库·后端·oracle·rust·工业智能体·高炉智能化