转自: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标准语法! 
这个语法和适合用在需要 判断记录是否存在,不存在则插入存在则更新的场景.

最新文章

  1. MFC 如何创建浏览文件夹的对话框
  2. 【原创】Android selector选择器无效或无法正常显示的一点研究
  3. MATLAB 图像操作基础
  4. jquery 点击事件
  5. Encoding 分类: HDU 2015-06-25 21:56 9人阅读 评论(0) 收藏
  6. linux c 多线程编程
  7. opencv 手写选择题阅卷 (四)Android端 手机应用开发
  8. 水题 hdu1002------用BigInteger解决大数问题
  9. Android中那些权限
  10. NIO和IO(转)
  11. Toolbar Painter 工具条制作
  12. Django 1.10中文文档-第一个应用Part1-请求与响应
  13. Web Component总结
  14. MySQL 查询最近几天的记录 最近7天的记录 本周内的记录
  15. JavaScript日历控件开发
  16. random模块(随机数)
  17. 【.NET架构】BIM软件架构01:Revit插件产品架构梳理
  18. Tomcat 配置详解和优化
  19. 金蝶特性配置(超级BOM)
  20. spring cloud 学习

热门文章

  1. scala的泛型浅析
  2. 【shell脚本】字符串和数组的使用
  3. Graphics与Canvas
  4. 封装AJAX库(参考JQ)
  5. LaTeX中Python代码的语法高亮
  6. 多进程之multiprocessing模块和进程池的实现
  7. ffmpeg 命令行 杂记
  8. JS中call()和apply()以及bind()的区别
  9. 工具---《.264视频 转成 MP4视频》
  10. rac 数组之遍历