MySql中ON DUPLICATE KEY UPDATE用法解析
2015-07-31 11:38
639 查看
在项目中常见的一种应用情景是,每做完一件事情都要更新一下统计表,就要根据主键去统计表里面去查询是否已经有这样的一条记录,如果有就更新,如果没有就插入一条记录。常见的做法是写三条sql语句:
select * from player_count where player_id = 1;//查询统计表中是否有记录
insert into player_count(player_id,count) value(1,1);//没有记录就执行insert 操作
update player_count set count = count+1 where player_id = 1;//有记录就执行update操作
这种写法比较麻烦,性能也不高,可用on duplicate key update去做
insert into player_count(player_id,count) value(1,1) on duplicate key update count=count+1;
这样每次不管插入还是更新都调用这个语句就能达到我们要的效果,省了不少的判断。
如果在INSERT语句末尾指定了ON DUPLICATE KEY UPDATE,并且插入行后会导致在一个UNIQUE索引或PRIMARY KEY中出现重复值,则在出现重复值的行执行UPDATE;如果不会导致唯一值列重复的问题,则插入新行。
例如,如果列 a 为 主键 或 拥有UNIQUE索引,并且包含值1,则以下两个语句具有相同的效果:
INSERT INTO TABLE (a,c) VALUES (1,3) ON DUPLICATE KEY UPDATE c=c+1;
UPDATE TABLE SET c=c+1 WHERE a=1;
如果行作为新记录被插入,则受影响行的值显示1;如果原有的记录被更新,则受影响行的值显示2。
如果INSERT多行记录(假设 a 为主键或 a 是一个 UNIQUE索引列):
INSERT INTO TABLE (a,c) VALUES (1,3),(1,7) ON DUPLICATE KEY UPDATE c=c+1;
执行后, c 的值会变为 4 (第二条与第一条重复, c 在原值上+1).
INSERT INTO TABLE (a,c) VALUES (1,3),(1,7) ON DUPLICATE KEY UPDATE c=VALUES(c);
执行后, c 的值会变为 7 (第二条与第一条重复, c 在直接取重复的值7).
注意:ON DUPLICATE KEY UPDATE只是MySQL的特有语法,并不是SQL标准语法!
这个语法和适合用在需要 判断记录是否存在,不存在则插入存在则更新的场景.
select * from player_count where player_id = 1;//查询统计表中是否有记录
insert into player_count(player_id,count) value(1,1);//没有记录就执行insert 操作
update player_count set count = count+1 where player_id = 1;//有记录就执行update操作
这种写法比较麻烦,性能也不高,可用on duplicate key update去做
insert into player_count(player_id,count) value(1,1) on duplicate key update count=count+1;
这样每次不管插入还是更新都调用这个语句就能达到我们要的效果,省了不少的判断。
如果在INSERT语句末尾指定了ON DUPLICATE KEY UPDATE,并且插入行后会导致在一个UNIQUE索引或PRIMARY KEY中出现重复值,则在出现重复值的行执行UPDATE;如果不会导致唯一值列重复的问题,则插入新行。
例如,如果列 a 为 主键 或 拥有UNIQUE索引,并且包含值1,则以下两个语句具有相同的效果:
INSERT INTO TABLE (a,c) VALUES (1,3) ON DUPLICATE KEY UPDATE c=c+1;
UPDATE TABLE SET c=c+1 WHERE a=1;
如果行作为新记录被插入,则受影响行的值显示1;如果原有的记录被更新,则受影响行的值显示2。
如果INSERT多行记录(假设 a 为主键或 a 是一个 UNIQUE索引列):
INSERT INTO TABLE (a,c) VALUES (1,3),(1,7) ON DUPLICATE KEY UPDATE c=c+1;
执行后, c 的值会变为 4 (第二条与第一条重复, c 在原值上+1).
INSERT INTO TABLE (a,c) VALUES (1,3),(1,7) ON DUPLICATE KEY UPDATE c=VALUES(c);
执行后, c 的值会变为 7 (第二条与第一条重复, c 在直接取重复的值7).
注意:ON DUPLICATE KEY UPDATE只是MySQL的特有语法,并不是SQL标准语法!
这个语法和适合用在需要 判断记录是否存在,不存在则插入存在则更新的场景.
相关文章推荐
- mysql 事件
- mysql密码错误 以及 mysql 服务无法打开。(1067)
- MySQL的索引类型及简单优化
- [MySQL] MySQL将多条记录的某个字段合并成一条记录
- Mysql常见水平分表方案
- mysql分表与分区表
- 快速安装及配置MySQL Replication双主节点集群--及改变数据保存目录
- mysql 数据库还原出错ERROR:Unknown command '\' mysql中断
- 用jdbc连接mysql数据库(基础篇)
- 定时器mysql自动备份脚本
- Mysql 启动运行
- Mysql常用命令详解
- Mysql分表准则
- Mysql数据库主从及主主复制配置演示
- heartbeat+DRBD+mysql+LVS集群实战
- MySQL修改root密码的多种方法
- mysql查询当天、本周、上周、本月、上月信息
- [MySQL FAQ]系列 — 怎么计算打开文件数
- MySQL怎么计算打开文件数
- mysql数据库主从及主主复制配置演示