mysql insert or update_数据库 INSERT OR UPDATE 问题总结

我们在数据库相关的开发中经常遇到这样一个问题:向数据库表中插入某条记录,若是存在就对其进行更新。例如,有如下数据表user(id为主键):

idnamepasswd

1usr1pswd1

.........

向其插入id=1,name=usr1,passwd=pswd2的记录,若存在id=1的记录,则对其进行更新操作。

这个问题在单连接访问的条件下下很简单,可以先对记录执行UPDATE操作,若影响的条数为0,说明没有此记录,然后可以放心大胆的进行INSERT操作。

但是在多并发访问的条件下,上述做法则存在同步问题。若是引入事务则又显得有些小题大做,若是能有一条语句以原子操作的方式完成上述功能那便是极好的。现将MySQL与Oracle的处理办法总结如下。

1、MySQL

MySQL有两种处理方式:REPLACE 和 ON DUPLICATE KEY

(1)REPLACE

REPLACE与INSERT的语法相仿,形式如下:

replace into table(col1,col2,...) values(val1,val2,...);

例如:

replace into user(id,name,passwd) values(1,'usr1','pawd2');

如果插入的记录与表中原有的记录不重复,则执行INSERT操作,影响的记录数为1;如果插入的记录与表中原有的记录重复,则先DELETE原有记录,再执行INSERT,影响的记录数为2。

(2)ON DUPLICATE KEY

ON DUPLICATE KEY语句则是把要执行的INSERT语句和UPDATE语句连接在一起。其形式如下:

insert_statement on duplicate key update_statement

例如:

insert into user(id,name,passwd) values(1,'usr1','pswd2')

on duplicate key update name='usr1',passwd='pswd2';

如果插入的记录与表中原有的记录不重复,则执行前半部分的INSERT操作,影响的记录数为1;如果插入的记录与表中原有的记录重复,则执行后半部分的UPDATE操作,影响的记录数为2。

2、Oracle

Oracle则主要使用merge语句进行处理。例如:

merge into user using(select 1 id,'usr1','pswd2' from dual) t on (t.id=user.id)

when matched then

update set user.name='usr1',user.passwd='pswd2'

when not matched then

insert (user.id,user.name,user.passwd) values(1,'usr1','pswd2');

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值