插入数据判断数据是否存在并更新,解决并发及脏数据问题

本文介绍了一种在数据库开发中常见的需求场景:当数据不存在时插入,已存在时更新的方法。传统做法需要两次数据库连接且在高并发下可能出问题。文章提出使用SQL语句的ON DUPLICATE KEY UPDATE特性来简化这一过程,确保原子性并提高效率。

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


 1.出现问题

在做数据库开发的时候,经常会遇到这样的一种情景:

当一条数据不存在的时候,插入这条数据,如果这条数据的主键已经在数据库中存在,那么更新这条数据。

你们一般怎么做呢?先根据主键查询数据,然后判断是否存在数据,如果存在数据,则update字段,否则insert数据。

这样做的弊端就是需要两次连接数据库服务器,然后利用高级语言来判断是否存在的逻辑。


问题:高并发的情况下数据会出问题,不能保证原子性 

 2.解决办法

      例如数据表sys_user的表结构如下所示:

      insert into sys_user(user_id, user_name, user_password) values ('3', '1', '3') 

      ON DUPLICATE KEY
      UPDATE  user_id='3', user_name = '3', user_password = '2' ;


ON DUPLICATE KEY UPDATE(当出现DUPLICATE KEY主键重复错误的时候触发Update操作,当然要求就是表在设计的时候一定要有主键primary key

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值