(转载)http://www.codesky.net/article/201003/105754.html

代码如下:
INSERT table (auto_id, auto_name) values (1, ‘yourname') ON DUPLICATE KEY UPDATE auto_name='yourname'

ON DUPLICATE KEY UPDATE的使用 
如果您指定了ON DUPLICATE KEY UPDATE,并且插入行后会导致在一个UNIQUE索引或PRIMARY KEY中出现重复值,则执行旧行UPDATE。例如,如果列a被定义为UNIQUE,并且包含值1,则以下两个语句具有相同的效果:

mysql> INSERT INTO table (a,b,c) VALUES (1,2,3) 
-> ON DUPLICATE KEY UPDATE c=c+1; 
mysql> UPDATE table SET c=c+1 WHERE a=1; 

如果行作为新记录被插入,则受影响行的值为1;如果原有的记录被更新,则受影响行的值为2。 
注释:如果列b也是唯一列,则INSERT与此UPDATE语句相当:

mysql> UPDATE table SET c=c+1 WHERE a=1 OR b=2 LIMIT 1; 

如果a=1 OR b=2与多个行向匹配,则只有一个行被更新。通常,您应该尽量避免对带有多个唯一关键字的表使用ON DUPLICATE KEY子句。 
您可以在UPDATE子句中使用VALUES(col_name)函数从INSERT...UPDATE语句的INSERT部分引用列值。换句话说,如果没有发生重复关键字冲突,则UPDATE子句中的VALUES(col_name)可以引用被插入的col_name的值。本函数特别适用于多行插入。VALUES()函数只在INSERT...UPDATE语句中有意义,其它时候会返回NULL。 
示例:

mysql> INSERT INTO table (a,b,c) VALUES (1,2,3),(4,5,6) 
-> ON DUPLICATE KEY UPDATE c=VALUES(a)+VALUES(b); 

本语句与以下两个语句作用相同:

mysql> INSERT INTO table (a,b,c) VALUES (1,2,3) 
-> ON DUPLICATE KEY UPDATE c=3; 
mysql> INSERT INTO table (a,b,c) VALUES (4,5,6) 
-> ON DUPLICATE KEY UPDATE c=9; 

当您使用ON DUPLICATE KEY UPDATE时,DELAYED选项被忽略。


例子:

mysql> select * from student;
+-----+--------+
| age | energy |
+-----+--------+
| 23 | 45 |
| 21 | 6 |
| 20 | 6 |
| 87 | 6 |
| 19 | 6 |
| 29 | 57 |
| 57 | 456 |
+-----+--------+
7 rows in set (0.00 sec) mysql>
mysql> select * from student;
+-----+--------+
| age | energy |
+-----+--------+
| 23 | 45 |
| 21 | 6 |
| 20 | 6 |
| 87 | 6 |
| 19 | 6 |
| 29 | 57 |
| 57 | 666 |
+-----+--------+
7 rows in set (0.00 sec) mysql> insert into student(age) values(57) ON DUPLICATE KEY UPDATE energy=555;
Query OK, 2 rows affected (0.02 sec) mysql> select * from student;
+-----+--------+
| age | energy |
+-----+--------+
| 23 | 45 |
| 21 | 6 |
| 20 | 6 |
| 87 | 6 |
| 19 | 6 |
| 29 | 57 |
| 57 | 555 |
+-----+--------+
7 rows in set (0.00 sec) mysql>
mysql> insert student values(46, 686);  // 可以看到直接使用insert而不是insert into
Query OK, 1 row affected (0.00 sec) mysql> insert student(age) values(46) ON DUPLICATE KEY UPDATE energy=999; // 可以看到直接使用insert而不是insert into
Query OK, 2 rows affected (0.00 sec) mysql> select * from student;
+-----+--------+
| age | energy |
+-----+--------+
| 23 | 45 |
| 21 | 6 |
| 20 | 6 |
| 87 | 6 |
| 19 | 6 |
| 29 | 57 |
| 57 | 555 |
| 46 | 999 |
+-----+--------+
8 rows in set (0.00 sec) mysql>

最新文章

  1. Nginx中文详解、配置部署及高并发优化
  2. 在 shell 脚本获取 ip、数字转换等网络操作
  3. Unity3D事件函数的执行顺序 - 包含渲染等模块的完整版,中英文对照
  4. 内联函数inline
  5. public void onItemClick(AdapterView arg0, View view, int position,long arg3)详解【整理自网络】
  6. HDU 5596 GTW likes gt 倒推
  7. ecshop后台添加栏目
  8. Java 打开文件的两种方式
  9. Android初级教程短信防火墙
  10. 分布式团队中沟通引发的问题, itest 解决之道
  11. 关于 Uboot 中有趣的 0xdeadbeef 填充
  12. Mui --- app与服务器之间的交互原理、mui ajax使用
  13. 【jmeter】jmeter之-聚合点
  14. tensor flow 安装
  15. 算法笔记_182:历届试题 核桃的数量(Java)
  16. (转)Linux:使用libgen.h:basename,dirname
  17. 对Java对象的认识与理解
  18. 【lydsy1407】拓展欧几里得求解不定方程+同余方程
  19. 永久修改IP地址
  20. CentOS 同步时间

热门文章

  1. php 多维数组转换
  2. Jqure实现下拉多选
  3. C#调用百度云存储接口上传文件
  4. Asp.net MVC利用Ajax.BeginForm实现bootstrap模态框弹出,并进行前段验证
  5. [中级] 有效删除URL中的index.php
  6. DataSet与DataTable基本用法
  7. Error Creating Deployment 有关Tomcat配置问题
  8. 自动化工具word文档批量转html
  9. HTML5有语义的内联元素详解
  10. php之图片处理类缩略图加水印