关于这个问题,翻译过来就是 :数据库中操作同一张表如果有记录存在就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