SQL Server select並發導致insert多條數據


場景:

  在開發某活動時,一個用戶只能參與一次,因此insert之前要判斷數據庫是否存在數據,若不存在插入,若存在不操作。但是當請求並發時,數據庫insert操作尚未執行,這樣select的結果為用戶未參與,導致插入了多條數據。

思路:

  第一次select、insert必須要執行完畢,才能進行第二次。

解決方案:

  一、

1 INSERT INTO TABLE_NAME (createDate,字段2,字段3,字段4,user_id)
2 SELECT now(),值2,值3,值4 ,#{user_id} FROM TABLE_NAME WHERE
3 NOT EXISTS (SELECT * FROM TABLE_NAME WHERE DATE(createDate)=DATE(now()) AND user_id = #{user_id})

二、

1 begin tran 
2 declare @count int =0
3 select @count=[Count] from tb_name WITH(UPDLOCK,HOLDLOCK) where id=1
4 select @count as count1
5 waitfor delay '00:00:30'
6 update tb_name set [Count]=@count+1 where id=1
7 commit tran 
8 select * from tb_name

 


免責聲明!

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



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