首页 > 数据库 >ON DUPLICATE KEY UPDATE单个增加更新及批量增加更新的sql

ON DUPLICATE KEY UPDATE单个增加更新及批量增加更新的sql

时间:2023-02-21 11:01:25浏览次数:56  
标签:cameraInfo zone1Id UPDATE 更新 VALUES cameraId sql zone2Id

本文为博主原创,转载请注明出处。

       在实际应用中,经常碰到导入数据的功能,当导入的数据不存在时则进行添加,有修改时则进行更新,

在刚碰到的时候,第一反应是将其实现分为两块,分别是判断增加,判断更新,后来发现在mysql中有

ON DUPLICATE KEY UPDATE一步就可以完成,感觉实在是太方便了,

       该语句是基于唯一索引或主键使用,比如一个字段a被加上了unique index,并且表中已经存在了一条记录值为1,

下面两个语句会有相同的效果:

INSERT INTO table (a,b,c) VALUES (1,2,3)  
ON DUPLICATE KEY UPDATE c=c+1;

UPDATE table SET c=c+1 WHERE a=1;

 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);

表中将更改(增加或修改)两条记录。

在mybatis中进行单个增加或修改sql的写法为:

<insert id="insertOrUpdateCameraInfoByOne" paramerType="com.pojo.AreaInfo">
insert into camera_info( cameraId,zone1Id,zone1Name,zone2Id,zone2Name,zone3Id,zone3Name,zone4Id,zone4Name)
VALUES(
#{cameraId},#{zone1Id},#{zone1Name}, #{zone2Id},
#{zone2Name}, #{zone3Id}, #{zone3Name},
#{zone4Id}, #{zone4Name},)
ON DUPLICATE KEY UPDATE
cameraId = VALUES(cameraId),
zone1Id = VALUES(zone1Id),zone1Name = VALUES(zone1Name),
zone2Id = VALUES(zone2Id),zone2Name = VALUES(zone2Name),
zone3Id = VALUES(zone3Id),zone3Name = VALUES(zone3Name),
zone4Id = VALUES(zone4Id),zone4Name = VALUES(zone4Name)
</insert>

在mybatis中进行批量增加或修改的sql为:

<insert id="insertOrUpdateCameraInfoByBatch" parameterType="java.util.List">
insert into camera_info(
zone1Id,zone1Name,zone2Id,zone2Name,zone3Id,zone3Name,zone4Id,zone4Name,
cameraId
)VALUES
<foreach collection ="list" item="cameraInfo" index= "index" separator =",">
(
#{cameraInfo.zone1Id}, #{cameraInfo.zone1Name}, #{cameraInfo.zone2Id},
#{cameraInfo.zone2Name}, #{cameraInfo.zone3Id}, #{cameraInfo.zone3Name},
#{cameraInfo.zone4Id}, #{cameraInfo.zone4Name},
#{cameraInfo.cameraId},
)
</foreach>
ON DUPLICATE KEY UPDATE
zone1Id = VALUES(zone1Id),zone1Name = VALUES(zone1Name),zone2Id = VALUES(zone2Id),
zone2Name = VALUES(zone2Name),zone3Id = VALUES(zone3Id),zone3Name = VALUES(zone3Name),
zone4Id = VALUES(zone4Id),zone4Name = VALUES(zone4Name),
cameraId = VALUES(cameraId)
</insert>

 



标签:cameraInfo,zone1Id,UPDATE,更新,VALUES,cameraId,sql,zone2Id
From: https://blog.51cto.com/u_15535797/6076094

相关文章

  • mysql8.0的可用方案
    1.在/use/local下创建mysql文件夹mkdirmysql2.切换到mysql文件夹下cdmysql3.下载mysqlwgethttps://dev.mysql.com/get/Downloads/MySQL-8.0/mysql-8.0.20-linux-......
  • T-SQL里数据库工程师都不知道的秘密之SQL Server自定义函数UDF
    T-SQLSQLServerUDF自定义函数概念与案例实战函数的定义这里的函数指的是用户自定义函数(UDF)全名为(user-definedfunction),以下简称为函数。它是数据库里的用户自定义程......
  • 更新CentOS默认yum源为mirrors.aliyun.com
    更新CentOS默认yum源/镜像源为mirrors.aliyun.com1、首先备份系统自带的yum源配置文件   /etc/yum.repos.d/CentOS-Base.repo   在进行此类更改时候,先对系统默......
  • 基于 springboot + mybatis-plus + MySQL 重构过去一个项目的踩坑总结(持续更新)
    ①使用mybatis-plus时,如果根据某个条件查询没有查到数据,那么返回的实体类是null,如果使用get方法就会导致空指针异常,这点要规避②如果Map初始化在循环体外,那么在循......
  • Mysql自增ID用完了会咋样?
    这个问题其实可以分为有主键&无主键两种情况回答。国际惯例,先上张脑图:02有主键如果你的表有主键,并且把主键设置为自增。在MySQL中,一般会把主键设置成int型。而MySQ......
  • mysql触发器对于null值的处理
    mysql的触发器是不会对null值进行直接监控的,需要手动对于null值做处理这样处理null值就可以NEW.prom_priceisnotnullandOLD.prom_priceisnull......
  • Mysql的版本号实现可重复读
    mysql基于乐观锁原理实现的mvcc(Multi-VersionConcurrencyControl,多版本并发控制)mysql默认隔离级别就是可重复读,这个隔离级别解决了不可重复读和脏读,所谓不可重复读就是......
  • exception during geoip databases update
    报错描述:[2023-02-19T16:16:39,957][ERROR][o.e.i.g.GeoIpDownloader][CP]exceptionduringgeoipdatabasesupdatejavax.net.ssl.SSLHandshakeException:sun.sec......
  • 最新JAVA实现导出mysql表结构到Word
    JAVA实现导出mysql表结构到Word1.引入jar包<dependency><groupId>org.apache.poi</groupId><artifactId>poi-ooxml</artifactId>......
  • flask_sqlalchemy_datetime_fakedate
    /Users/song/codelearn/QueryingWithDatesinFlask-SQLAlchemy/datequeries/app.pyfromdatetimeimportdate,datetime,timedeltafromfakerimportFakerfrom......