Chinaunix首页 | 论坛 | 博客
  • 博客访问: 438170
  • 博文数量: 94
  • 博客积分: 3066
  • 博客等级: 中校
  • 技术积分: 908
  • 用 户 组: 普通用户
  • 注册时间: 2006-01-25 17:10
文章分类

全部博文(94)

文章存档

2016年(3)

2015年(4)

2014年(1)

2013年(9)

2012年(8)

2011年(1)

2010年(8)

2009年(4)

2008年(2)

2007年(6)

2006年(48)

我的朋友

分类: Mysql/postgreSQL

2006-03-08 17:14:43

6.4.3 INSERT 句法
INSERT INTO  tbl_name [(col_name,...)]
        VALUES ((expression | DEFAULT),...),(...),...
         ON DUPLICATE KEY UPDATE col_name=expression, ...
如果你指定 ON DUPLICATE KEY UPDATE 子句(在 MySQL 4.1.0 中被新加入),并且被插入的一个记录行在 PRIMARY
或 UNIQUE 键上将会产生一个重复值,那么老的记录行将被 UPDATE。举例来说:
mysql> INSERT INTO table (a,b,c) VALUES (1,2,3)
   --> ON DUPLICATE KEY UPDATE c=c+1;
假设列 a 被定义为 UNIQUE,并且已存在了一个 1,它将与下面的语句产生同样的结果:
mysql> UPDATE table SET c=c+1 WHERE a=1;
注意:如果列 b 也是唯一的,UPDATE 命令将要被写成这样:
mysql> UPDATE table SET c=c+1 WHERE a=1 OR b=2 LIMIT 1;
并且如果 a=1 OR b=2 匹配几个记录行,只有 一个 记录行将被更新!大体上,在有多重 UNIQUE 键的表上,
你应该尽是避免使用 ON DUPLICATE KEY 子句。

让我们来看一下数据变化:
a表id,name上有一个联合唯一索引
select *  from a
---------------------------------
id name value
10 ff 
10 aa dd
执行这个命令
INSERT    a   (id, name) values (10, 'aa')       ON DUPLICATE KEY UPDATE  value='ff', name='ee'
然后查看表的变化
select * from a
------------------------------
id name value
10 ff 
10 ee ff
可以看到,第二行由于已经存在id=10, name=aa, 所以更新了这一行,使得name=ee, values=ff
 
 
阅读(11895) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~