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

 

转载于:https://www.cnblogs.com/BurtBlog/p/6296002.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值