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

article/2025/10/25 12:52:53

有时会有这种需求,当符合某种条件的数据存在时,去修改它,不存在时,则新增,也就是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+2INSERT 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 UPDATEID = 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 UPDATEID = 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>

http://chatgpt.dhexx.cn/article/96fCWEw3.shtml

相关文章

MySQL批量插入数据脚本

作为测试环境&#xff0c;往往需要大数据量的情况下来测试SQL查询性能 这里编写一个批量插入数据的数据脚本&#xff1a; 1&#xff09;设置log_bin_trust_function_creators //创建函数&#xff0c;假如报错&#xff1a;This function has none of DETERMINISTIC… 查看是否…

mysql 批量插入

最近新的项目写了不少各种 insertBatch 的代码&#xff0c;一直有人说&#xff0c;批量插入比循环插入效率高很多&#xff0c;那本文就来实验一下,到底是不是真的&#xff1f; 测试环境&#xff1a; SpringBoot 2.5Mysql 8JDK 8Docker 首先&#xff0c;多条数据的插入&#…

Mysql批量插入1000条数据

使用mysql的存储过程 1.现有如下一张表&#xff1a;site_row 2.创建存储过程 CREATE PROCEDURE p01 () BEGIN declare i int; set i1;while i<1000 doINSERT INTO site_row(row_id,row_num) VALUES ( i,i);set ii1; end WHILE;END; 3.执行存储过程 CALL p01(); 4.查看效…

mysql 批量查询插入,MySQL批量插入查询出来的数据

timg.jpg 先看SQL&#xff1a; INSERT INTO movie_detail_tab (VIDEO_ID, PLAY_URL) SELECT b.ID AS VIDEO_ID, x.playurl AS PLAY_URL FROM ( SELECT a.playurl, CONCAT( a.卡通名, a.第几集 ) AS videoCname FROM ( SELECT playurl, SUBSTRING_INDEX(sname, , 1) AS 卡通名,…

C++向mysql批量插入数据

一、以下共统计了3种批量插入的方法: 1、普通方法:一条一条插入; 2、使用拼接语句一次性插入,拼接语句的语法如下: insert into table (col1,col2,col3) values (’a’,’b‘,’c‘), (’a1’,’b1‘,’c1‘),(’a2‘,’b2‘,’c2),...... 对于拼接语句sql有…

mysql新增,更新,批量插入操作

mysql新增和更新操作 一、Insert的几种语法 例子: CREATE TABLE users (id int(11) NOT NULL AUTO_INCREMENT,username varchar(30) DEFAULT NULL,money double DEFAULT NULL,PRIMARY KEY (id),UNIQUE KEY username_index (username) ) ENGINEInnoDB AUTO_INCREMENT10 DEFAU…

MySQL优化:批量插入大数据4种实用、讲究方案的测试

简明&#xff1a;本文记录个人使用MySQL插入大数据总结较实用的方案&#xff0c;通过对常用插入大数据的4种方式进行测试&#xff0c;即for循环单条、拼接SQL、批量插入saveBatch()、循环 开启批处理模式&#xff0c;得出比较实用的方案心得。 &#xff08;个人记录学习笔记内…

Hi3559A Hi3519A Hi3556A算力对比

Hi3559A Hi3519A Hi3556A算力对比 Hi3559A 即Hi3559ARFCV100 4T算力 封装 FC-BGA 常备 Hi3519A Hi3519ARFVV100 才是AI芯片 2T算力 订货 先进的智能IP摄像头Soc Hi3519V101 先进的工业IP摄像头Soc Hi3516DV300 1T算力 常备 专业4M智能IP摄像SoC Hi3516CV500 0.5T算力 常备货…

海思Hi3798MV310芯片处理器参数介绍

Hi3798MV310是用于IPTV/OTT机顶盒市场的支持4KP60 解码的超高清高性能SOC芯片。集成4核64位高性能Cortex A53处理器和多核高性能 2D/3D加速引擎&#xff1b;支持H.265/AVS2 4Kx2KP60 10bit 超高清视频解码&#xff0c;高性能的 H.265 高清视频编码&#xff0c;HDR视频解码及显示…

湖北电信黑盒创维E900V21E-HI3798MV310-MT7661RSN-当贝桌面-免拆卡刷固件包

湖北电信黑盒创维E900V21E-HI3798MV310-MT7661RSN-当贝桌面-免拆卡刷固件包-内有主板图及教程 特点&#xff1a; 1、适用于对应型号的电视盒子刷机&#xff1b; 2、开放原厂固件屏蔽的市场安装和u盘安装apk&#xff1b; 3、修改dns&#xff0c;三网通用&#xff1b; 4、大量…

移动机顶盒migu-jt-u1 unt400c刷机 hi3798 root

准备好u盘&#xff0c;把固件放进去&#xff0c;插到机顶盒上 1&#xff0c;打开机顶盒天灵盖。短接这两个敏感点&#xff0c;开机&#xff0c;不松手&#xff0c;等出现刷机界面。 视频 链接&#xff1a; caiyun.139.com/m/i?105Cq73pcbcbW 提取码&#xff1a;Bgq3 复制内容…

海思AI芯片(Hi3519A/3559A)方案学习(三)Ubuntu18.0.4上编译Hi3519AV100 uboot和kernel

先重申下我的平台为ubuntu18.0.4&#xff0c;SDK的目标平台为Hi3519AV100系列 准备工作 安装himix200交叉编译器 tar –xzf arm-himix200-linux.tgzsudo ./arm-himix200-linux.installsource /etc/profile 安装SDK包 tar -zxf Hi3519AV100_SDK_V2.0.1.0.tgzsudo ./sdk.unp…

Hi3798M V200 SDK文档介绍

目录 下载SDK并解压解压后主要的文件夹 下载SDK并解压 步骤1&#xff1a;下载Hi3798M V200 SDK。 大家如果有下载路径可以直接下载&#xff0c;如果没有的话可以使用我这个路径。 链接&#xff1a;https://pan.baidu.com/s/1buqwwZ7yBPNmi6JA2KG1eQ 提取码&#xff1a;dv6f ps…

FPGA+海思Hi3559

海思3559av100接收FPGA通过LVDS发送的模拟数据&#xff0c;&#xff0c;模拟数据为彩带。 FPGA可以模拟彩带或者黑白灰图像的模拟数据&#xff0c;通过LVDS协议&#xff08;LVDS为低电压差分信号&#xff0c;核心是采用极低的电压摆幅高速差动传输数据&#xff0c;可以实现点对…

海思Hi3798MV310机顶盒芯片Datasheet-基本信息

Hi3798M V310 是用于 IPTV/OTT 机顶盒市场的支持 4KP60 解码的超高清高性能 SOC芯片。集成 4 核 64 位高性能 Cortex A53 处理器和多核高性能 2D/3D 加速引擎&#xff1b;支持H.265/AVS2 4Kx2KP60 10bit 超高清视频解码&#xff0c;高性能的 H.265 高清视频编码&#xff0c;HDR…

海思Hi3798MV200机顶盒芯片规格书-基本信息

Hi3798MV200 是用于 IPTV/OTT 机顶盒市场的支持 4KP60 解码的全 4K 高性能 SOC芯片。集成 4 核 64 位高性能 Cortex A53 处理器和多核高性能 2D/3D 加速引擎;支持H.265 4Kx2K@P60 10bit 超高清视频解码,高性能的 H.265 高清视频编码,HDR 视频解码及显示,HDR 转 SDR,BT.202…

hi3798mv300是什么手机_海思Hi3798MV300/Hi3798MV310/Hi3798MV300H共升级包使用指南芯片手册...

本文针对现网各种场景&#xff0c;对hi3798MV300、Hi3798MV310、Hi3798MV300H共升级包方案的升级包的编译、制作方法和原理进行了详细介绍。 适用场景 场景1&#xff1a; 现网同时有Hi3798MV300和Hi3798MV300H&#xff0c;而且版本基线相同&#xff0c;现需要升级到最新版本 场…

Hi3519AV100 适配IMX347

前言 环境介绍&#xff1a; 1.编译环境 Ubuntu 18.04.5 LTS 2.SDK Hi3519AV100_SDK_V2.0.1.0 3.单板 Hi3519AV100开发板 IMX347 2688x1520(4M)30fps master mode i2c id 0x34 一、Sensor i2c寄存器读写 海思默认文件系统是有i2c读写工具的&#xff0c;可以使用这个工具…

海思Hi3798硬件设计,Hi3798 datasheet(2)参考资料

本文主要介绍 Hi3798C V200 芯片的硬件封装、管脚描述、管脚复用寄存器的配置方法、电气特性参数、原理图设计建议、PCB 设计建议、热设计建议等内容。本文主要为硬件工程师提供硬件设计的参考。 2.1 封装 Hi3798C V200 芯片 TFBGA&#xff08;Thin Fine BGA package&#xf…

HI3798MV200驱动移植

目录 1.UBOOT配置修改方法 2.由EMMC启动改为SPI NAND FLASH 启动 3.网络调试 4.PHY复位 5.内核起来网络不通 6.增加RTC 7.PHY 灯ACT LINK 问题 8.PHY link状态查询 9.ETH0 网络状态灯修改 1.UBOOT配置修改方法 需要对应版本的HITOOL&#xff0c;个人也是废了很大劲&a…