⼀条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');
mysql删除重复的数据保留一条当执⾏这条sql语句时,如果数据库中已经存在相同的记录,则数据库会忽略该条命令,返回的受影响的⾏数为0。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论