高并发情况下用户处理同一条数据解决方法

时间:2022-10-11 23:36:19

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

数据库表字段

高并发情况下用户处理同一条数据解决方法

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

A用户

高并发情况下用户处理同一条数据解决方法

 

B用户

高并发情况下用户处理同一条数据解决方法

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

高并发情况下用户处理同一条数据解决方法

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

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

 s_user表结构

高并发情况下用户处理同一条数据解决方法

s_user表数据

高并发情况下用户处理同一条数据解决方法

关键点:给当前表写一个触发器,当对表修改时,更新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也更新为当前的时间:

高并发情况下用户处理同一条数据解决方法

B用户:

高并发情况下用户处理同一条数据解决方法

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

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