高並發情況下用戶處理同一條數據解決方法


  如果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用戶:

此時,我們還可以做一些其他的處理,提示用戶"當條數據已被更新,請退出后重新操作"等等。

后續的業務處理,還需自己擴展,這只是解決方案的一種。如果您現在有更好的方法,歡迎到下方評論留言~~~


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM