您的位置:首页 > 数据库 > Oracle

Oracle merge into的用法,以及MySQL的相同功能语句

2017-07-01 17:28 399 查看
今天在重构以前的代码发现一个效率比较低的SQL,插入一条数据的时候先查询,如果不为空,则进行更新操作,如果为空则插入,则插入。

一,Oracle

merge into emp a

using (select '111' as id,'周文军' as name from dual) b

on (a.id= b.id)

when matched then

  update set a.name= b.name

when not matched then

  insert (id,name) values(b.id,b.name);

--emp表中有id和name字段,当插入一个id=‘111’,name=‘周文军’的数据时,进行判断

1、如果原表存在id=111的人,则运行update语句。

2、如果表中不存在id=111的人,则运行insert语句。

--解释

将插入的数据放置到b表中,和a表进行匹配,匹配规则Wieusing中的规则,如果匹配成功,则运行uodate,否则运行insert,此写法比先查询再做判断的效率提高很多。

二,mysql

mysql中要求该表存在主键
MySQL中存在insert ignore into语句,用法和插入语句相同,但如果表中已存在该记录的主键,则忽略此插入语句。
MySQL中的存在更新否则插入的语句为replace into,语法同insert into,如
replace into emp (id,name) values('111','周文静');
--解释
前提是id为emp的主键
如果存在id=‘111’的记录,则运行更新语句,否则插入。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: