最近在工作中遇到了一个需求
在执行数据库操作时需要先判断指定的数据是否存在,如果不存在则插入,存在则更新
最开始使用的是三条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);
这样就能达到目的。

本文介绍了一种优化的SQL语句使用方法,通过一条语句即可实现数据的存在检查、更新或插入,避免了传统方法中的冗余操作,并解释了如何在创建表时加入唯一键约束以确保正确执行。
1905

被折叠的 条评论
为什么被折叠?



