(转)ON DUPLICATE KEY UPDATE --mysql的一个有趣语法
2024-09-04 00:25:27
转自:http://my.oschina.net/iceman/blog/53735?fromerr=3kAEPcQr
如果在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 INTO TABLE (a,c) VALUES (1,3),(1,7) ON DUPLICATE KEY UPDATE c=c+1;
执行后, c 的值会变为 4 (第二条与第一条重复, c 在原值上+1).
INSERT INTO TABLE (a,c) VALUES (1,3),(1,7) ON DUPLICATE KEY UPDATE c=VALUES(c);
执行后, c 的值会变为 7 (第二条与第一条重复, c 在直接取重复的值7).
note:ON DUPLICATE KEY UPDATE只是MySQL的特有语法,并不是SQL标准语法!
这个语法和适合用在需要 判断记录是否存在,不存在则插入存在则更新的场景.
最新文章
- MFC 如何创建浏览文件夹的对话框
- 【原创】Android selector选择器无效或无法正常显示的一点研究
- MATLAB 图像操作基础
- jquery 点击事件
- Encoding 分类: HDU 2015-06-25 21:56 9人阅读 评论(0) 收藏
- linux c 多线程编程
- opencv 手写选择题阅卷 (四)Android端 手机应用开发
- 水题 hdu1002------用BigInteger解决大数问题
- Android中那些权限
- NIO和IO(转)
- Toolbar Painter 工具条制作
- Django 1.10中文文档-第一个应用Part1-请求与响应
- Web Component总结
- MySQL 查询最近几天的记录 最近7天的记录 本周内的记录
- JavaScript日历控件开发
- random模块(随机数)
- 【.NET架构】BIM软件架构01:Revit插件产品架构梳理
- Tomcat 配置详解和优化
- 金蝶特性配置(超级BOM)
- spring cloud 学习