MySQL插入更新ON DUPLICATE KEY UPDATE

在平时使用mysql更新数据的时候,会出现这种需求:若该数据的主键值或者UNIQUE KEY (唯一索引)已经在表中存在,就对该数据进行更新,若不存在就插入该数据。

我们可以通过 ON DUPLICATE KEY UPDATE  达到以上目的, 且能保证操作的原子性和数据的完整性。

向数据库中插入一条记录:

若该数据的主键值/ UNIQUE KEY 已经在表中存在,则执行更新操作, 即UPDATE 后面的操作,否则插入一条新的记录。

如:INSERT INTO mRowUpdate(id,`value`) VALUES(3, 'SuperMan') ON DUPLICATE KEY UPDATE `value`='SuperMan';

如果mRowUpdate表中存在id=3的数据,则更新value为'SuperMan',如果不存在则插入(3, 'SuperMan')

 

ON DUPLICATE KEY UPDATE 特别适用于多行插入。如:

INSERT INTO `table` (`a`, `b`, `c`) VALUES (1, 2, 3), (4, 5, 6) ON DUPLICATE KEY UPDATE `c`=VALUES(`a`)+VALUES(`b`);

Tips: VALUES()函数只在INSERT…UPDATE语句中有意义,其它时候会返回NULL。

 

注意事项:

若多个索引都冲突,则只有一条记录被修改。

create table test(
id int not null primary key,
num int not null UNIQUE key,
tid int not null
)
为了测试两个唯一索引都冲突的情况,然后插入下面的数据
insert into test values(1,1,1), (2,2,2);
然后执行:
insert into test values(1,2,3) on duplicate key update tid = tid + 1;
因为a和b都是唯一索引,插入的数据在两条记录上产生了冲突,然而执行后只有第一条记录被修改

转自:https://blog.csdn.net/u010003835/article/details/54381080/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值