merge into和on duplicate key

本文介绍了在Oracle和MySQL数据库中实现记录存在则更新、不存在则插入的功能。Oracle使用mergeinto函数,通过指定条件匹配现有记录进行更新或插入新记录。MySQL采用onduplicatekey更新方式,依据主键或唯一索引判断记录是否已存在,若存在则更新,否则插入。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

经常遇到这样的需求,存在这条纪录则更新,不存在则插入。
1.Oracle中使用merge into函数.
MERGE [INTO [schema .] table [t_alias]
USING [schema .] { table | view | subquery } [t_alias]
ON ( condition )
WHEN MATCHED THEN merge_update_clause
WHEN NOT MATCHED THEN merge_insert_clause;

例如:
 merge into test t
 using (select 1 as id from dual) d
 on (t.id = d.id)
 when matched then
   update set t.name = 'modify',t.work = 'mwork'
 when not matched then
   insert (id, name, work) values (d.id, 'insert', 'iwork')

2.Mysql中on duplicate key,Mysql根据主键或者唯一索引判断是否存在这条纪录,如果没有的话,会继续插入进去而不会更改
INSERT [LOW_PRIORITY | DELAYED | HIGH_PRIORITY] [IGNORE]

       [INTO] tbl_name [(col_name,...)]

       VALUES ({expr | DEFAULT},...),(...),...

       [ ON DUPLICATE KEY UPDATE col_name=expr, ... ]

例如:
INSERT INTO test (id, NAME, WORK)
VALUES
	(1, 'insert', 'iwork') 
ON DUPLICATE KEY 
UPDATE 
  NAME = 'modify',
  WORK = 'mwork'


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值