最近在工作中遇到了一个需求
在执行数据库操作时需要先判断指定的数据是否存在,如果不存在则插入,存在则更新
最开始使用的是三条SQL语句:
- SELECT bl_count,bl_src,bl_date,bl_topic FROM temp_table WHERE bl_topic=? AND bl_src=? AND bl_date=?;
-
- UPDATE temp_table SET bl_count=? WHERE bl_topic=? AND bl_src=? AND bl_date=?;
-
- INSERT INTO temp_table (bl_src,bl_date,bl_count,bl_topic) values(?,?,?,?)
逻辑是:
- if(SELECT!= null){
- UPDATE
- }else{
- INSERT
- }
后来leader提示还有新的方法,一条SQL语句就能搞定:
- 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语句的执行会造成唯一键的重复。
所以,在创建表的时候还要加上唯一键的约束:
- ALTER TABLE temp_table ADD CONSTRAINT c_topic_src_date UNIQUE(bl_topic,bl_src,bl_date);
这样就能达到目的。