如果2个及以上的用户同时打开一条数据,并修改数据,提交后会造成数据冲突。

数据库表字段

SRE实战 互联网时代守护先锋,助力企业售后服务体系运筹帷幄!一键直达领取阿里云限量特价优惠。

高并发情况下用户处理同一条数据解决方法 随笔 第1张

假设现在有2个用户都已经打开同一条数据,并且显示的数据都是id:1;name:张三;age:15;

A用户

高并发情况下用户处理同一条数据解决方法 随笔 第2张

 

B用户

高并发情况下用户处理同一条数据解决方法 随笔 第3张

现在我们假设用户A先操作,用户B后操作,此时数据库保存的数据为

高并发情况下用户处理同一条数据解决方法 随笔 第4张

用户A没有对该记录进行操作没有生效。

下面提供一个解决方案,在数据库中新增一个字段:last_date

 s_user表结构

高并发情况下用户处理同一条数据解决方法 随笔 第5张

s_user表数据

高并发情况下用户处理同一条数据解决方法 随笔 第6张

关键点:给当前表写一个触发器,当对表修改时,更新last_update更新时间

 1 USE [demo_test]
 2 GO
 3 /****** Object:  Trigger [dbo].[tr_s_user_change_update]    Script Date: 04/27/2019 10:31:22 ******/
 4 SET ANSI_NULLS ON
 5 GO
 6 SET QUOTED_IDENTIFIER ON
 7 GO
 8 ALTER trigger [dbo].[tr_s_user_change_update] --触发器名称
 9 on [dbo].[s_user] --表名
10 for update
11 as
12 declare @time datetime
13 set @time=GETDATE()
14 update s_user set last_update=@time where id =(select id from inserted)  -- where id 更新的主键

此时当我们对当前记录修改时,新增一个约束条件

A用户:

1 update s_user set name='张三' where id=3 and last_update='2019-04-27 10:09:02.297' 

此时数据库已经修改如下,修改name为张三的同时,last_update也更新为当前的时间:

高并发情况下用户处理同一条数据解决方法 随笔 第7张

B用户:

高并发情况下用户处理同一条数据解决方法 随笔 第8张

此时,我们还可以做一些其他的处理,提示用户"当条数据已被更新,请退出后重新操作"等等。

后续的业务处理,还需自己扩展,这只是解决方案的一种。如果您现在有更好的方法,欢迎到下方评论留言~~~

扫码关注我们
微信号:SRE实战
拒绝背锅 运筹帷幄