最近在工作中遇到了一個需求
在執行數據庫操作時需要先判斷指定的數據是否存在,如果不存在則插入,存在則更新
最開始使用的是三條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);
這樣就能達到目的。