数据库SQL: If Exists Update Else Insert

关于这个问题,翻译过来就是 :数据库中操作同一张表如果有记录存在就update更新,如果没有记录存在就insert 插入记录

如果简单的用if else判断,这种方法一方面,数据库的IO操作执行两次,另一方面并发的时候也会有问题。

IF (Key Exists)
   UPDATE row for key
ELSE
   INSERT new row with key

经过查找学习,找到了比较好的解决方案。

1. 在mysql中使用

insert into ...... on duplicate key update   可实现相应的需求,具体使用方法可找文档

2. 在sqlserver中使用merge into语句可实现,这里我写一个我项目中的代码

merge into ImageInformation as target
using (select '86020HS03201906050012' as ImageNumber) as source
on source.ImageNumber = target.ImageNumber
when matched then
update set Reserve1 = ''
when not matched then
insert (ImageNumber,VehicleNumber,ContainerNumber,URIPath,ScanTime,CountOfGoodsType,ConclusionType,Reserve1) VALUES ('86020HS03201906050012',' ','AAAA0605012','//','2019-06-14 15:46:26','1','With Suspect','');

网上好多的教程都是用两张表的场景中使用merge into语句,在同一张表的场景下,注意 using 括号中对应的source表的写法。

86020HS03201906050012 是 ImageNumber 的一个值,也是该表的主键

参考文章:SQL Server: MERGE (AKA UPSERT) =(INSERT / UPDATE / DELETE) – All In One

相关文章

开始在上面输入您的搜索词,然后按回车进行搜索。按ESC取消。

返回顶部