当前位置: > 数据库 > MySQL >

mysql 语法 on duplicate key update

时间:2015-01-11 01:17来源:linux.it.net.cn 作者:IT

需要根据某个时间点来统计数量,例如统计每天网站的访问量,本人以前的做法是先查询当前有没有记录,如果存在就更新访问量的值,否则就插入一条。其实在Mysql中可以一条SQL语句来搞定,只要使用ON DUPLICATE KEY UPDATE即可。例如:

insert into daypv(day,cnt) values('2012-11-22',1) 
     on duplicate key update cnt = cnt + 1;

如果insert 末尾指定了on duplicate key update,插入数据会导致一个primary key或unique索引出现重复,那么就对已经存在的行执行update操作,条件就是primary key或unique索引。

对于一次插入一条记录没有问题,如果一次插入多条记录,其中某些可能会造成primary key或unique索引重复,那该如何处理呢。其实和单条处理类似,只要在后面使用values函数即可,例如:

insert into daypv(day,cnt)
	values('2012-11-22',1),
	('2012-11-23',2),
	('2012-11-24',3),
	('2012-11-25',4)
	on duplicate key update cnt = cnt + values(cnt);

上述 “cnt = cnt + values(cnt)”中第一个是cnt指更新的字段,第二个指原来的值,第三个是上面insert对应行中指定的cnt的值,例如2012-11-24记录已经存在,cnt的原始值为5,那么执行上述sql后,2012-11-24的cnt就为8 ( 3 + 5)。

另外需要注意的是 ON DUPLICATE KEY UPDATE 是Mysql特有的,不是标准的SQL语法。


(责任编辑:IT)
------分隔线----------------------------
栏目列表
推荐内容