ON DUPLICATE KEY UPDATE 用法
注意:ON DUPLICATE KEY UPDATE 是Mysql特有的语法,仅Mysql有效。
作用:当执行insert操作时,有已经存在的记录,执行update操作。
用法:
有一个test表,id为主键。第一次插入数据
INSERT INTO test(id,name,age)VALUES(1,'2',3),(11,'22',33)
此时表中数据增加了一条主键’id’为‘1’和‘11’的两条记录,当我们再次执行一条id为1的插入语句时,会发生什么呢?
INSERT INTO test(id,name,age)VALUES(1,'张三',13)
INSERT INTO test(id,name,age)VALUES(1,'张三',13)
> 1062 - Duplicate entry '1' for key 'PRIMARY'
> 时间: 0.034s
Mysql告诉我们,我们的主键冲突了,看到这里我们是不是可以改变一下思路,当插入已存在主键的记录时,将插入操作变为修改:
-- 在原sql后面增加 ON DUPLICATE KEY UPDATE
INSERT INTO test ( id, NAME, age )
VALUES( 1, '张三', 13 ) ON DUPLICATE KEY UPDATE id = 1,NAME = '张三',age = 13
执行结果中受影响的行数是2。
-- 在原sql后面增加 ON DUPLICATE KEY UPDATE
INSERT INTO test ( id, NAME, age )
VALUES( 1, '张三', 13 ) ON DUPLICATE KEY UPDATE id = 1,NAME = '张三',age = 13
> Affected rows: 2
> 时间: 0.18s
执行上面的语句结果
此时我们如果再次插入( 1, '张三', 13 ) 的数据时会有什么结果
-- 在原sql后面增加 ON DUPLICATE KEY UPDATE
INSERT INTO test ( id, NAME, age )
VALUES( 1, '张三', 13 ) ON DUPLICATE KEY UPDATE id = 1,NAME = '张三',age = 13
> Affected rows: 0
> 时间: 0.013s
可以看到影响的行数为0。插入的时候主键冲突,ON DUPLICATE KEY UPDATE会执行更新操作,更新为id = 1,NAME = '张三',age = 13 ,但是并没有我们想象的执行更新。
总结:ON DUPLICATE KEY UPDATE首先会检查插入的数据主键是否冲突,如果冲突则执行更新操作,如果ON DUPLICATE KEY UPDATE的子句中要更新的值与原来的值都一样,则不更新。如果有一个值与原值不一样,则更新:
-- 在原sql后面增加 ON DUPLICATE KEY UPDATE
INSERT INTO test ( id, NAME, age )
VALUES( 1, '张三', 13 ) ON DUPLICATE KEY UPDATE id = 1,NAME = '张三',age = 133
> Affected rows: 2
> 时间: 0.014s
执行完毕,id为1的age值改为133
目前id为1的数据age字段值为13,我们执行插入语句时只改变了其中一个值age=133,则影响行数为2。此时注意VALUES( 1, '张三', 13 ) 中age值为13,ON DUPLICATE KEY UPDATE子句中age值为133。
如果插入的数据主键有冲突,则修改字段值以ON DUPLICATE KEY UPDATE子句的值为准。
ON DUPLICATE KEY UPDATE子句写的是固定值,怎么动态赋值呢?如果一次插入多条数据,怎么动态获取主键冲突所要更新的值呢?
ON DUPLICATE KEY UPDATE age = VALUES(age)
总结:
1. ON DUPLICATE KEY UPDATE检查主键或唯一索引字段是否冲突。
2. update的字段值与现存的字段值相同,则不更新。
3. 动态更新字段值用VALUES(字段名称)。
ON DUPLICATE KEY UPDATE 用法相关推荐
- on duplicate key update用法及优缺点
Mysql on duplicate key update用法及优缺点 在实际应用中,经常碰到导入数据的功能,当导入的数据不存在时则进行添加,有修改时则进行更新, 在刚碰到的时候,一般思路是将其实现分 ...
- ON DUPLICATE KEY UPDATE 用法与说明
ON DUPLICATE KEY UPDATE作用 先声明一点,ON DUPLICATE KEY UPDATE为Mysql特有语法,这是个坑 语句的作用,当insert的时候如果对应的记录已经存在,则 ...
- mysql insert into on_MySQL之INSERT INTO ON DUPLICATE KEY UPDATE用法详解 | 夕辞
MySQL数据库使用中如果主键或唯一键冲突,会报错,因此我们会用到insert into on duplicate key update语法,但是该语法具体怎么用以及返回什么值,今天就来讨论下. 首先 ...
- INSERT INTO… ON DUPLICATE KEY UPDATE用法
使用INSERT的时候 有表T(id,A,B,C,D) 插入的时候希望通过A,B索引唯一记录 ,有重复的时候更新C,D INSERT INTO T(A,B,C,D) VALUES (a,b,c,d) ...
- Mysql on duplicate key update用法及优缺点
在实际应用中,经常碰到导入数据的功能,当导入的数据不存在时则进行添加,有修改时则进行更新, 在刚碰到的时候,一般思路是将其实现分为两块,分别是判断增加,判断更新,后来发现在mysql中有ON DUPL ...
- ON DUPLICATE KEY UPDATE 作用及一句SQL实现批量修改
ON DUPLICATE KEY UPDATE 作用及一句SQL实现批量修改 本文学习自ON DUPLICATE KEY UPDATE 用法与说明 首先声明:ON DUPLICATE KEY UPDA ...
- MySQL中 ON DUPLICATE KEY UPDATE语法的使用
MySQL ON DUPLICATE KEY UPDATE 为Mysql特有语法 ON DUPLICATE KEY UPDATE 用法与说明 Mysql中INSERT ... ON DUPLICATE ...
- on duplicate key update 的用法及优缺点
项目中数据的操作有时候会令人头大,遇到一个需求: 需要将数据从A数据库的a数据表同步到B数据库的b数据表中(ab表结构相同,但不是主从关系...just同步过去) 第一次同步过去,b表为空,同步很简单 ...
- SQL语句中ON DUPLICATE KEY UPDATE column=IF(条件,值1,值2 ) 的使用
Insert...on duplicate key相信大家都知道了,是一个非常好用的功能,可以在批量导入数据的时候插入并且保证在key冲突的时候执行更新操作而不是报错.笔者最近写代码的时候却碰到一个需 ...
最新文章
- EasyUI表单验证,自定义插件验证,自定义js插件验证,远程验证,常见手机号,中英文,qq等验证规则验证...
- 《你不知道的Javascript--上卷 学习总结》(原型)
- jquery中对小数进行取整
- Mac OS X 10.8.5 安装编译glib
- 自然语言处理笔记-哈工大 关毅
- Bootstrap3 排版-地址
- videojs 动态加载视频
- [原]解决百度地图多个Marker和InfoWindow时总是打开最后一个InfoWindow的问题
- XML转换为dataframe
- kettle和spoon ETL数据同步工具
- QtDesigner配置
- ANSYS Electronics Desktop 19.2电机仿真思路
- convert 8bit/10bit RGB444,YUV444,NV12,NV21 to PNG
- 学习的 定义是什么?生物
- PHP实现用户登录注册(详细教程)
- 机器人底盘的核心技术及应用案例
- [Android Input系统]MotionEvent的序列化传送
- 离线数仓建设及技术选型
- pmos低电平驱动_MOS管驱动电路总结
- 2021年全球无线天线收入大约6724.2百万美元,预计2028年达到14740百万美元