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]