今天做项目的时候遇到了一个这种情况,就是可能要对某个数据表频繁的更新,如果更新的条目在数据表中就更新,如果不再数据表中就插入这条记录
那么问题来了,传统的做法都是首用主键去查询数据表,如果数据表中有这条记录,则更新这条记录,如果没有,则讲这条记录插入到表中,
这就需要三条sql语句来完成:
例如一下数据表:
+-----------+---------+------+-----+---------+-------+
| Field
+-----------+---------+------+-----+---------+-------+
| player_id | int(11) | NO
| skill_id | int(11) | NO
| skill_lvl | int(11) | NO
| count
+-----------+---------+------+-----+---------+-------+
1.select * from player_count where player_id= 1;//查询统计表中是否有记录
2.insert into player_count(player_id, skillid, skill_lvl, count) value(1,1, 1, 1);//没有记录就执行insert 操作
3.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, 1, 1) on duplicate key update count=count+1;
这样每次不管插入还是更新都调用这句语句就能达到我们要的效果,省了不少的判断。
另外,如果想用多个表项值来做索引,如通过player_id和skill_id一起来做索引,确定一条记录,可以使用联合索引UNIQUE KEY 'SQL_ID' (' player_id ', ' skill_id ')