文档章节

mysql "ON DUPLICATE KEY UPDATE" 语法

雪人
 雪人
发布于 2012/04/16 17:40
字数 364
阅读 31626
收藏 14
      如果在INSERT语句末尾指定了ON DUPLICATE KEY UPDATE,并且插入行后会导致在一个UNIQUE索引或PRIMARY KEY中出现重复值,则在出现重复值的行执行UPDATE;如果不会导致唯一值列重复的问题,则插入新行。
例如,如果列 a 为 主键 或 拥有UNIQUE索引,并且包含值1,则以下两个语句具有相同的效果:
INSERT INTO TABLE (a,c) VALUES (1,3) ON DUPLICATE KEY UPDATE c=c+1;
UPDATE TABLE SET c=c+1 WHERE a=1;
如果行作为新记录被插入,则受影响行的值显示1;如果原有的记录被更新,则受影响行的值显示2。
这个语法还可以这样用:
如果INSERT多行记录(假设 a 为主键或 a 是一个 UNIQUE索引列):
1.INSERT INTO TABLE (a,c) VALUES (1,3),(1,7) ON DUPLICATE KEY UPDATE c=c+1;

执行后, c 的值会变为 4 (第二条与第一条重复, c 在原值上+1).
2.INSERT INTO TABLE (a,c) VALUES (1,3),(1,7) ON DUPLICATE KEY UPDATE c=VALUES(c);

执行后, c 的值会变为 7 (第二条与第一条重复, c 在直接取重复的值7).
注意:ON DUPLICATE KEY UPDATE只是MySQL的特有语法,并不是SQL标准语法!
这个语法和适合用在需要 判断记录是否存在,不存在则插入存在则更新的场景.
可以参考语法:
http://dev.mysql.com/doc/refman/5.1/zh/sql-syntax.html#insert

© 著作权归作者所有

雪人
粉丝 16
博文 6
码字总数 3132
作品 0
海淀
程序员
私信 提问
加载中

评论(6)

嗨儿葱
嗨儿葱
速度慢
aeoluspu
aeoluspu
特别表数据量大的时候 不适合用此语法
拾荒者的笔记
拾荒者的笔记
数据量到什么程度算是大呢
buger
buger
这语法效率超低。
雪人
雪人 博主

引用来自“王建奎Jerrick”的评论

赞了,这个语法帮我解决了一个大问题。

哈哈,荣幸荣幸!
王二铁
王二铁
赞了,这个语法帮我解决了一个大问题。
mysql on duplicate update 语法

mysql "ON DUPLICATE KEY UPDATE" 语法 如果在INSERT语句末尾指定了ON DUPLICATE KEY UPDATE,并且插入行后会导致在一个UNIQUE索引或PRIMARY KEY中出现重复值,则在出现重复值的行执行UPDAT...

mrliuze
2016/06/30
135
0
Mysql 原生语句中save or update 的各种写法

Mysql 原生语句中save or update 的各种写法 背景   在平常的开发中,经常碰到这种更新数据的场景:先判断某一数据在库表中是否存在,存在则update,不存在则insert。如果使用Hibernate,它...

Tek_Eternal
2015/02/09
1K
0
mysql insert语法注意事项(ON DUPLICATE KEY UPDATE )

mysql insert语法注意事项(ON DUPLICATE KEY UPDATE ) INSERT语法 一、DELAYED 使用延迟插入操作 DELAYED调节符应用于INSERT和REPLACE语句。当DELAYED插入操作到达的时候,服务器把数据行放入...

vga
2014/09/25
200
0
MySQL INSERT ... ON DUPLICATE KEY UPDATE (转)

看程序竟然发现Mysql有这个功能! 以前写的程序呀…………………… MySQL 自4.1版以后开始支持INSERT … ON DUPLICATE KEY UPDATE语法,使得原本需要执行3条SQL语句(SELECT,INSERT,UPDATE)...

daweilang
2016/09/26
0
0
mysql妙用:批量插入记录,遇到重复记录则为自动更新

在更新大量数据时可能同时遇到两个问题: 如果每条更新执行一次sql性能很低,也容易造成阻塞; 批量更新时又有可能遇到主键重复的问题 使用 ON DUPLICATE KEY UPDATE 一条sql解决批量更新和主...

码上有春天
2015/05/07
5.8K
0

没有更多内容

加载失败,请刷新页面

加载更多

springboot 403 问题

添加WebAppConfigurer 配置 @Configuration@EnableAutoConfigurationpublic class WebAppConfigurer extends WebMvcConfigurerAdapter { public WebAppConfigurer() { } ......

布袋和尚_爱吃鱼
27分钟前
3
0
Python自动更换壁纸爬虫与tkinter结合

直接上代码 import ctypesimport timeimport requestsimport osfrom threading import Threadfrom tkinter import Tk, Label, Button,Entry,StringVar,messagebox# '放到AppData\Roami......

物种起源-达尔文
28分钟前
3
0
Postgresql Study 笔记

Postgresql 安装 Windows, MAC Install Postgresql 下载地址: https://www.enterprisedb.com/downloads/postgres-postgresql-downloads Linux Install sudo apt-get update sudo apt-get in......

slagga
30分钟前
4
0
layer.open 打开新页面传参问题

如图所示,点击出售,把A页面的数据传到弹框上面,因为弹框比较复杂,所以使用引入一个新页面。 A.html a.js B.html b.js 1、第一种方案 sellInte: function (){ var obj = document.g...

木九天
33分钟前
4
0
沙龙报名 | 区块链数据服务技术应用实践

京东云是国内首家提供区块链数据在线分析服务产品的公司,也是行业内首家对区块链数据服务进行开源的公司。 本次沙龙是京东云BDS开源后,首次在深圳举办线下沙龙,我们将邀请京东云BDS团队核...

京东云技术新知
33分钟前
4
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部