存在该记录则更新,不存在则插入的sql
时间:2006-03-08 来源:zyrf2001
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 <null>
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 <null>
10 ee ff 可以看到,第二行由于已经存在id=10, name=aa, 所以更新了这一行,使得name=ee, values=ff
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 <null>
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 <null>
10 ee ff 可以看到,第二行由于已经存在id=10, name=aa, 所以更新了这一行,使得name=ee, values=ff
相关阅读 更多 +