一条sql语句执行:有则更新,无则新增

一、Oracle、Sqlserver数据库:(merge into)

通过Merge into你能够在一个SQL语句中对一个表同时执行inserts和updates操作. 当然是update还是insert是依据于你的指定的条件判断的,Merge into可以实现用B表来更新A表数据,如果A表中没有,则把B表的数据插入A表。

1、Merge into的基本语法

	MERGE INTO [表名] [表别名] 
	USING ( [查询内容] )[或者像表查询一样的语句] 
	ON ([条件表达式] AND [...]...) 
	WHEN MATHED THEN [匹配的update操作] 
	WHEN NOT MATHED THEN [不匹配的insert操作] 

例:

	MERGE INTO  UAM_LOCK  A
	USING (SELECT '123' as CUSTOMERID, 'L' as STATUS_CODE FROM dual) B on (A.CUSTOMERID=B.CUSTOMERID)
	WHEN MATCHED THEN UPDATE SET A.STATUS-CODE=B.STATUS_CODE
	WHEN NOT MATCHED THEN  INSERT (A.CUSTOMERID, A.STATUS_CODE) VALUES (B.CUSTOMERID, B.STATUS_CODE )

注意事项:

Merge Into的原理是,从using 搜出来的结果逐条与on条件匹配,然后决定是update还是Insert。 当USING后面的sql没有查询到数据的时候,Merge Into语句是不会执行update和Insert操作的。

所以要想让Merge Into正常运行,要保证USING 后面的SELECT有数据,个人喜欢使用DUAL表作为USING后的表,方便自己控制。

二、Mysql数据库:

1、REPLACE INTO
发现重复的先删除再插入,如果记录有多个字段,在插入的时候如果有的字段没有赋值,那么新插入的记录这些字段为空。

replace into uam_lock(customerid,status_code) select '123','L';
或
replace into uam_lock(customerid,status_code) values('123','L');

注意的是:插入数据的表必须有主键或者是唯一索引!否则的话,replace into 会直接插入数据,这将导致表中出现重复的数据。

2、INSERT INTO ON DUPLICATE KEY UPDATE
发现重复的是更新操作。在原有记录基础上,更新指定字段内容,其它字段内容保留。

insert into uam_lock(customerid,status_code) values('123','L') on DUPLICATE KEY UPDATE status_code=‘O’;

注意:要给唯一字段加上索引,类型为:UNIQUE

3、IGNORE INTO
判断是否存在,存在不插入,否则插入。

insert ignore into uam_lock(customerid,status_code) values('123','L');

当执行这条sql语句时,如果数据库中已经存在相同的记录,则数据库会忽略该条命令,返回的受影响的行数为0。

  • 2
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值