1. 程式人生 > >Oracle merge into的用法,以及MySQL的相同功能語句

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

今天在重構以前的程式碼發現一個效率比較低的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’的記錄,則執行更新語句,否則插入。