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

原创 2018年04月17日 15:02:12


 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

解决并发情况下数据脏读

需求:获取系统的某一条数据,根据数据进行逻辑处理
  • AngelMyMei
  • AngelMyMei
  • 2014-07-13 17:25:37
  • 2784

丢失的修改、不可重复读、读脏数据、幻影读

常见并发并发一致性问题包括:丢失的修改、不可重复读、读脏数据、幻影读(幻影读在一些资料中往往与不可重复读归为一类)。 丢失修改 下面我们先来看一个例子,说明并发操作带来的数据的不一致性问题。 考...
  • shixiaoguo90
  • shixiaoguo90
  • 2014-06-03 13:41:34
  • 1478

并发插入insert,根据状态判断重复记录的问题

在判断记录是否重复,通常在插入这条记录时会用select语句查询时下是否有相同记录,如果存在,就不允许插入。 这种select和insert之间有时间间隔,如果并发的有两个人同时在insert,在s...
  • raddle60
  • raddle60
  • 2010-04-09 11:27:00
  • 4215

数据库端防止并发的SQL语句 插入时就判断是否存在

insert into `aaa` ( `APP_TYPE_ID`, `APP_TIME_ID`, `CREATE_USER`, `APPOINTMEN_DATE` ) select...
  • Sugar_521
  • Sugar_521
  • 2017-04-11 17:37:23
  • 510

数据库并发下的脏数据问题

事情是这样的,我有个需求,简单来说是每次insert三条记录,每次都给本次insert的记录version+1,理想情况下,假设没有并发,最后的数据应该是这样 id    name        ve...
  • cuishuli
  • cuishuli
  • 2016-07-08 02:03:48
  • 3597

oracle插入数据前判断是否存在

插入数据前如果bucundeclare num number; begin select nvl(count(1), 0) into num from hts_employee where I...
  • W_xiaoming
  • W_xiaoming
  • 2014-06-05 11:11:11
  • 3359

oracle先判断数据是否存在再插入

有时候用oracle的数据库,插入数据的时候需要判断一下。比如,每天每人只能写一条。 在插入的时候就要先做个判断,查一下是不是当天有此人的操作记录。 就要先 select count(*) f...
  • CsethCRM
  • CsethCRM
  • 2014-05-16 11:24:44
  • 3158

MySQL 判断记录是否存在,不存在则插入存在则更新

冯锐超 2017-03-21 13:44 最近在做一个电影相关的项目需要定时从第三方合作商那拿相关的影片,影院,影厅等一些数据,然后经过数据清洗变为自己的数据。在这里就涉及到重复数据的问题。...
  • u011277123
  • u011277123
  • 2017-03-22 10:37:52
  • 4768

应用和系统开发过程中,高并发的访问对同一数据的不一致,读脏数据的处理办法

1.什么是并发操作?
  • u014516863
  • u014516863
  • 2014-10-11 10:27:54
  • 1011

ORacle 存储过程

  • 2011年10月24日 17:16
  • 2KB
  • 下载
收藏助手
不良信息举报
您举报文章:插入数据判断数据是否存在并更新,解决并发及脏数据问题
举报原因:
原因补充:

(最多只允许输入30个字)