baiyunjn 发表于 2017-12-14 15:42:33

SQL Server select并发导致insert多条数据

  场景:
  在开发某活动时,一个用户只能参与一次,因此insert之前要判断数据库是否存在数据,若不存在插入,若存在不操作。但是当请求并发时,数据库insert操作尚未执行,这样select的结果为用户未参与,导致插入了多条数据。
  思路:
  第一次select、insert必须要执行完毕,才能进行第二次。
  解决方案:
  一、
  

INSERT INTO TABLE_NAME (createDate,字段2,字段3,字段4,user_id)  

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

  二、
  

begin tran  
declare @count int =0

  
select @count= from tb_name WITH(UPDLOCK,HOLDLOCK) where>  
select @count as count1
  
waitfor delay '00:00:30'

  
update tb_name set =@count+1 where>  
commit tran
  
select * from tb_name
  
页: [1]
查看完整版本: SQL Server select并发导致insert多条数据