高并发情况下用户处理同一条数据解决方法
如果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用户:
此时,我们还可以做一些其他的处理,提示用户"当条数据已被更新,请退出后重新操作"等等。