MySQL 插入更新 ON DUPLICATE KEY UPDATE

本文探讨了在高并发场景下,如何高效地使用MySQL的ONDUPLICATEKEYUPDATE特性来实现数据的原子性更新与插入操作。通过对比传统方法,强调了此特性在保证数据完整性和提高效率方面的重要作用。

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

平时我们在设计数据库表的时候总会设计 unique 或者 给表加上 primary key 的限制条件.

如果插入数据的时候,经常会有这样的需求,我们想往数据库中插入一条记录,若数据表中存在相同的主键记录,我们就更新该条记录, 否则就插入一条新的记录。

逻辑上我们需要怎么写(伪代码):

$result = mysql_query(‘select * from xxx where id = 1’);
row=mysqlfetchassoc(row = mysql_fetch_assoc(row=mysqlfetchassoc(result);
if($row){
mysql_query(‘update …’);
}else{
mysql_query(‘insert …’);
}

但是这样写有两个问题:
1、效率太差,每次执行都要执行2个sql
2、高并发的情况下数据会出问题,不能保证原子性

还好MySQL 为我们解决了这个问题:我们可以通过 ON DUPLICATE KEY UPDATE 达到以上目的, 且能保证操作的原子性和数据的完整性。

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

举个栗子
id 为主键
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值