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


 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

你可能感兴趣的:(问题解决)