mysql 批量插入更新数据 的 两种方法

2023-11-15

有时会有这种需求,当符合某种条件的数据存在时,去修改它,不存在时,则新增,也就是saveOrUpdate操作

当没有的时候就是插入语句
有数据的时候判断主键和唯一索引是否一样,一样那就按照 ON DUPLICATE KEY UPDATE写的修改需要修改端字段值

方法一:采用replace 实现

replace into test (a,b,num) values('a','a',2),('b','b',3),('a','a',10);

但是replace 方法是 根据唯一键值做判断 如果存在 则先删除 再插入

方法二:ON DUPLICATE KEY UPDATE

// 有这个时间的数据就count+1,否则直接创建当前时间,count为1的数据
insert into zycxScanCount(create_time,count)
        VALUES(#{createTime}, 1)
        ON DUPLICATE KEY UPDATE count=count+1;

2.1介绍:

此条sql 前半部分和 批量insert 相同
on duplicate key 关键字 标识 如果该表中有UNIQUE索引或PRIMARY KEY 主键 重复的情况下 导致插入失败 会自动执行update方法 更新的字段和值 在末尾追加

ps:如需 更新值写死 也可以写成 num = num + 1
或者 直接更新为带插入数据的 num值 num = values(num)

2.2 注意:

1:ON DUPLICATE KEY UPDATE需要有在INSERT语句中有存在主键或者唯一索引的列,并且对应的数据已经在表中才会执行更新操作。而且如果要更新的字段是主键或者唯一索引,不能和表中已有的数据重复,否则插入更新都失败。

2:不管是更新还是增加语句都不允许将主键或者唯一索引的对应字段的数据变成表中已经存在的数据。

通常的,在ON DUPLICATE KEY UPDATE语句中,我们应该避免多个唯一索引的情况。如果需要插入或更新多条数据,并且更新的字段需要根据其它字段来运算时,可以使用如下语句:

INSERT INTO table (a,b,c) VALUES (1,2,3),(4,5,6)

ON DUPLICATE KEY UPDATE c=VALUES(a)+VALUES(b);


在ON DUPLICATE KEY UPDATE后面使用VALUES()方法,这个语句等同于下面的两个语句:

INSERT INTO table (a,b,c) VALUES (1,2,3)

ON DUPLICATE KEY UPDATE c=3;--1+2


INSERT INTO table (a,b,c) VALUES (4,5,6)

ON DUPLICATE KEY UPDATE c=9;--4+5


<insert id="saveOrUpdatePlanReportList" parameterType="java.util.List">
        insert into cmdb_device_resources
        ( ID,NODE,project_batch_id,IDC,
        DEVICECLASS1ID,DEVICECLASS2ID,DEVICECONFIGID,
        PLANNING_RESOURCES,BUILDING_RESOURCES,REMARK,CREATE_DATE)
        VALUES(
            #{item.cdrId},#{item.node},#{item.project},#{item.idc},
            #{item.deviceClass1Id},#{item.deviceClass2Id},#{item.deviceConfigId},
            #{item.planningResources},#{item.buildingResources},#{item.remark},now()
         )
        ON DUPLICATE KEY UPDATE
        ID = VALUES(ID),
        NODE = VALUES(NODE),
        project_batch_id = VALUES(project_batch_id),
        IDC = VALUES(IDC),
        DEVICECLASS1ID = VALUES(DEVICECLASS1ID),
        DEVICECLASS2ID = VALUES(DEVICECLASS2ID),
        DEVICECONFIGID = VALUES(DEVICECONFIGID),
        PLANNING_RESOURCES = VALUES(PLANNING_RESOURCES),
        BUILDING_RESOURCES = VALUES(BUILDING_RESOURCES),
        REMARK = VALUES(REMARK),
        CREATE_DATE = VALUES(CREATE_DATE)


<insert id="saveOrUpdatePlanReportList" parameterType="java.util.List">
        insert into cmdb_device_resources
        ( ID,NODE,project_batch_id,IDC,
        DEVICECLASS1ID,DEVICECLASS2ID,DEVICECONFIGID,
        PLANNING_RESOURCES,BUILDING_RESOURCES,REMARK,CREATE_DATE)
        VALUES
        <foreach collection="list" item="item" index="index" separator=",">
            (
            #{item.cdrId},#{item.node},#{item.project},#{item.idc},
            #{item.deviceClass1Id},#{item.deviceClass2Id},#{item.deviceConfigId},
            #{item.planningResources},#{item.buildingResources},#{item.remark},now()
            )
        </foreach>
        ON DUPLICATE KEY UPDATE
        ID = VALUES(ID),
        NODE = VALUES(NODE),
        project_batch_id = VALUES(project_batch_id),
        IDC = VALUES(IDC),
        DEVICECLASS1ID = VALUES(DEVICECLASS1ID),
        DEVICECLASS2ID = VALUES(DEVICECLASS2ID),
        DEVICECONFIGID = VALUES(DEVICECONFIGID),
        PLANNING_RESOURCES = VALUES(PLANNING_RESOURCES),
        BUILDING_RESOURCES = VALUES(BUILDING_RESOURCES),
        REMARK = VALUES(REMARK),
        CREATE_DATE = VALUES(CREATE_DATE)
    </insert>


本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

mysql 批量插入更新数据 的 两种方法 的相关文章

随机推荐

  • 小程序用户头像昵称获取不到解决办法

    1 根据官方要求 不会要求强制性授权 头像和昵称也将被收回 给的是统一的头像和昵称 需要我们调用接口去获取微信头像和昵称 2 通过原生的标签调用来获取微信头像和微信昵称 注意 这里的标签不能够修改 修改会导致头像回显问题和昵称获取问题 头像
  • OCaml实用工具

    好久没写博客了 天天写代码 有时候打游戏 就懒了 本人主要为了扩展sgx edger8r 所以学习了一番OCaml 多动手搜和写代码才算有点学会了OCaml 这里主要说一下OCaml工具的使用 OCaml的语法学习请直接参考官方手册 Rea
  • Nginx http 500错误分析及解决方法

    Nginx http 500错误分析及解决方法 参考文章 1 Nginx http 500错误分析及解决方法 2 https www cnblogs com gdufs p 6410373 html 备忘一下
  • Python基础之条件判断

    Python基础之条件判断 一 环境介绍 二 条件判断介绍 三 if语句的使用 1 if的第一种使用方法 2 if的第二种使用方法 3 if的第三种使用方法 4 if的第四种使用方法 四 if判断的运算符 五 学习小结 一 环境介绍 Pyt
  • CSS中如何实现文字跑马灯效果?

    聚沙成塔 每天进步一点点 专栏简介 跑马灯 写在最后 专栏简介 前端入门之旅 探索Web开发的奇妙世界 记得点击上方或者右侧链接订阅本专栏哦 几何带你启航前端之旅 欢迎来到前端入门之旅 这个专栏是为那些对Web开发感兴趣 刚刚踏入前端领域的
  • opencv颜色识别思路

    一 Opencv颜色识别步骤 调用手机摄像头 Opencv颜色处理 存储色块图像和位置信息 接下来主要介绍opencv颜色处理过程 二 Opencv图像处理思路 创建滑动条 用来调节阈值 识别出不同颜色 颜色空间转换 将RGB转换为HSV模
  • YOLO v5算法详解

    1 YOLO v5网络结构 2 输入端 3 Backone网络 4 Neck网络 5 Head网络 1 YOLO v5网络结构 图 1 YOLO v5网络结构图 由上图可知 YOLO v5主要由输入端 Backone Neck以及Predi
  • 列表元组字符串是python的什么系列_Python 序列(字符串、列表、元组)概述

    在 Python 中有六种基本数据类型 即数字 包括整形 长整 浮点 字符串 列表 元组 字典和布尔类型 其中 字符串 列表 元组被称之为序列 因为它们有着相同的访问模式 它们的每一个元素可以通过指定一个偏移量的方式得到 而多个元素可以通过
  • upload-labs 第四关-第九关闯关方法

    Pass 04 1 打开靶机 点击查看提示 发现这是一个 htaccess绕过 2 写入一个 htaccess的文件 文件内容如下 3 将文件修改为 htaccess的文件 4 上传文件 5 新建一个文本文档 内容如下 6 将文件类型修改为
  • [k8s]k8s架构图解

    k8s架构图解 启动参数及证书梳理 master端必须要装flannel 注 flannel网络能确保各节点间 Pod 网段实现互通 master 节点与 node 节点上的 Pods 通过 Pod 网络通信 所以需要在 master 节点
  • 搜索算法——爬山法

    不断更新中 一 爬山算法 爬山算法是一种简单的贪心搜索算法 该算法每次从当前位置的临近空间中选择一个最优解作为当前解 直到达到一个局部最优解 爬山算法可以类比成一个有失忆的人在浓雾中爬山 这里就揭示了爬山算法的两个问题 失忆 就是说这个人不
  • decode函数_decode函数的妙用

    如下这张表 包含id和name两列 其中id是主键 name允许为空 存在两条记录 一条是 id 1 name a 另一条是 id 2 name SQL gt create table emp id number primary key n
  • MySQL-数据库读写分离(中)

    作者 小刘在C站 个人主页 小刘主页 努力不一定有回报 但一定会有收获加油 一起努力 共赴美好人生 学习两年总结出的运维经验 以及思科模拟器全套网络实验教程 专栏 云计算技术 小刘私信可以随便问 只要会绝不吝啬 感谢CSDN让你我相遇 前言
  • 基于iView-Cascader的多选级联选择器:cascader-multi

    前言 iview的cascader 多级联动虽然可以实现多级联动 但是不支持多选 这里 cascader multi 可以支持多选功能 实现效果 真实效果和他有出入 这是网上找的好看的动图 实现步骤 1 安装 npm i cascader
  • 求解集合A和集合B的差集

    求解集合A和集合B的差集 题目 已知集合A和B的元素分别用不含头结点的单链表存储 函数difference 用于求解集合A与B的差集 并将结果保存在集合A的单链表中 例如 若集合A 5 10 20 15 25 30 集合B 5 15 35
  • 关于vue-cli 3版本做的改动,没有static文件夹,本地文件应放在哪儿,如何引用

    2 x版本 3 0版本 原来放在static下的文件 现在应该放在public文件夹下 原来的请求数据的写法 现在的写法 总结 vue3 0 对脚手架的结构和静态文件的引用方式都进行了简化
  • 字符流字节流相互转换

    1 字节输出流转换成字符输出流 写到硬盘 创建字节输出流 FileOutputStream fis new FileOutputStream E document aaa txt 字节输出流转换成字符输出流 OutputStreamWrit
  • 使用Python办公自动化:将文本与图表写入到PPT中

    使用Python办公自动化 将文本与图表写入到PPT中 其中含有写入文本 表格及图表到PPT中的一些常用函数 还含有一些对单元格的操作函数 代码如下 import pptx from pptx util import Inches from
  • 模型视图投影矩阵传递

    11
  • mysql 批量插入更新数据 的 两种方法

    有时会有这种需求 当符合某种条件的数据存在时 去修改它 不存在时 则新增 也就是saveOrUpdate操作 当没有的时候就是插入语句 有数据的时候判断主键和唯一索引是否一样 一样那就按照 ON DUPLICATE KEY UPDATE写的