文章标签 ‘on-duplicate-key-update’

mysql 语法 on duplicate key update

2012年11月23日 没有评论

需要根据某个时间点来统计数量,例如统计每天网站的访问量,本人以前的做法是先查询当前有没有记录,如果存在就更新访问量的值,否则就插入一条。其实在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语法。

分类: MySQL 标签:

无觅相关文章插件,快速提升流量