ON DUPLICATE KEY UPDATE单个增加更新及批量增加更新的sql
转:
ON DUPLICATE KEY UPDATE单个增加更新及批量增加更新的sql
本文为博主原创,转载请注明出处。
在实际应用中,经常碰到导入数据的功能,当导入的数据不存在时则进行添加,有修改时则进行更新,
在刚碰到的时候,第一反应是将其实现分为两块,分别是判断增加,判断更新,后来发现在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>

ON DUPLICATE KEY UPDATE单个增加更新及批量增加更新的sql的更多相关文章
- [转]主键冲突的话就更新否则插入 (ON DUPLICATE KEY UPDATE )
mysql "ON DUPLICATE KEY UPDATE" 语法如果在INSERT语句末尾指定了ON DUPLICATE KEY UPDATE,并且插入行后会导致在一个UNIQ ...
- 仓库储存,存在添加减少,不存在插入ON DUPLICATE KEY UPDATE
原文链接:https://blog.csdn.net/qq_42269354/article/details/100589640 首先声明:ON DUPLICATE KEY UPDATE 为MySQL ...
- ON DUPLICATE KEY UPDATE
如果在INSERT语句末尾指定了ON DUPLICATE KEY UPDATE,并且插入行后会导致在一个UNIQUE索引或PRIMARY KEY中出现重复值,则在出现重复值的行执行UPDATE: 如果 ...
- 深入mysql "on duplicate key update" 语法的分析
如果在INSERT语句末尾指定了on duplicate key update,并且插入行后会导致在一个UNIQUE索引或PRIMARY KEY中出现重复值,则在出现重复值的行执行UPDATE:如果不 ...
- MySQL中ON DUPLICATE KEY UPDATE使用
今天做推断插入用到了MySQL中ON DUPLICATE KEY UPDATE,如今Mark下面! 假设你想做到数据库中没有数据的话插入数据.有数据的话更新数据,那么你能够选择ON DUPLICATE ...
- (转载)[MySQL技巧]INSERT INTO… ON DUPLICATE KEY UPDATE
(转载)http://blog.zol.com.cn/2299/article_2298921.html MySQL 自4.1版以后开始支持INSERT … ON DUPLICATE KEY UPDA ...
- Mysql中Insert into xxx on duplicate key update问题
要点:Insert into xxx on duplicate key update可以在唯一索引重复的情况下,进行更新操作. (1) 插入里边的字段应该只有一个 唯一索引: ...
- mysql insert on duplicate key, update, ignore
insert 语句中不能使用where,所以如果需要根据插入的数据在已有的数据库表是否重复做一些操作可以使用下面三种方法: 1. 使用insert,捕获duplicate错误 2. insert in ...
- 深入mysql “ON DUPLICATE KEY UPDATE” 语法的分析
本篇文章是对mysql “ON DUPLICATE KEY UPDATE”语法进行了详细的分析介绍,需要的朋友参考下. mysql “ON DUPLICATE KEY UPDATE” 语法 如果在IN ...
随机推荐
- Django--CRM--modelformset的用法
一 . modelformset用法 其实和modelform方法差不多,只不过是显示的时候可以直接修改,显示的select的那种模式 from django.forms import modelfo ...
- python之路--操作系统介绍,进程的创建
一 . 操作系统的作用: 1:隐藏丑陋复杂的硬件接口,提供良好的抽象接口 2:管理.调度进程,并且将多个进程对硬件的竞争变得有序 二 多道技术: 所谓多道程序设计技术,就是指允许多个程序同时进入内存 ...
- kprobe原理解析
参考 http://www.cnblogs.com/honpey/p/4575928.html kprobe是linux内核的一个重要特性,是一个轻量级的内核调试工具,同时它又是其他一些更高级的内核 ...
- powerdesigner 16.5 不允许有扩展属性,或对象不存在
创建完之后这边会出现 选择刚创建的用户 这样就可以了
- css进行网站布局
一.一列布局(例如百度首页) 通常用 {margin:0 auto;} 控制. <!DOCTYPE> <html xmlns="http://www.w3.org/1999 ...
- codeforces703B
Mishka and trip CodeForces - 703B 小米什卡是一个伟大的旅行者,她访问了许多国家.在这次考虑去哪里旅行之后,她选择了XXX--这个美丽,但鲜为人知的北方国家. 以下是关 ...
- Stack Pointer Tracker
在Intel 64与IA-32架构中,存在一类用于跳转到以及跳出程序段的指令:PUSH.POP.CALL.LEAVE与RET.这些指令可以在没有其余指令的干预下隐式地更新栈寄存器(ESP),维护栈内的 ...
- Nginx 阻塞与非阻塞
L:32
- [HDU2065] "红色病毒"问题
传送门:>Here< 题意:现在有一长度为N的字符串,满足一下条件: (1) 字符串仅由A,B,C,D四个字母组成; (2) A出现偶数次(也可以不出现); (3) C出现偶数次(也可以不 ...
- HDU - 3917(朴素LIS + 最大流)
题意: 求出所有的最长上升子序列的个数且每个元素只能用一次 解析: 呵...呵...呵..呵..emm... 再见 我死了...wa了15发之后...原来不能用~ 要用 != EOF 这题算水题吧. ...