最近在工作中遇到了一个需求

在执行数据库操作时需要先判断指定的数据是否存在,如果不存在则插入,存在则更新

最开始使用的是三条SQL语句:

  1. SELECT bl_count,bl_src,bl_date,bl_topic FROM temp_table WHERE bl_topic=? AND bl_src=? AND bl_date=?;  
  2.   
  3. UPDATE temp_table SET bl_count=? WHERE bl_topic=? AND bl_src=? AND bl_date=?;  
  4.   
  5. INSERT INTO temp_table (bl_src,bl_date,bl_count,bl_topic) values(?,?,?,?)  
逻辑是:
  1. if(SELECT!= null){  
  2.     UPDATE  
  3. }else{  
  4.     INSERT  
  5. }  

后来leader提示还有新的方法,一条SQL语句就能搞定:

  1. INSERT INTO temp_table(bl_src,bl_date,bl_count,bl_topic) VALUES(?,?,?,?) ON DUPLICATE KEY UPDATE bl_count=bl_count+?;  

但是有个前提就是:什么时候会执行update语句?在SQL语句中并没有条件。

后来在网上看到的,执行update语句的条件是insert语句的执行会造成唯一键的重复。

所以,在创建表的时候还要加上唯一键的约束

  1. ALTER TABLE temp_table ADD CONSTRAINT c_topic_src_date UNIQUE(bl_topic,bl_src,bl_date);  

这样就能达到目的。

posted on 2013-09-10 18:56 姚先进 阅读(907) 评论(0)  编辑  收藏

只有注册用户登录后才能发表评论。


网站导航: