关于高并发下锁定数据的问题

leonbingo 2015-10-30 02:33:54
现在遇到这样一个需求,后台可以定义一个活动,这个活动由参与者的人数限制,于是就可能遇到这样的一个问题,当同一时间报名人数湖很多的时候,比如,当前活动限定60人报名,现在已经有59人了,这个时候也许会同时有5个人想一同报名,在程序进行写入的时候,首先判断,还有59人,判断还可以报名,这时候5个人都报上了,这不就造成了超出报名限额的问题,请问一般对于这种场景,是应该怎么设计的?
...全文
161 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
Tiger_Zhao 2015-11-02
  • 打赏
  • 举报
回复
-- 先加报名人数
UPDATE 活动
SET 报名人数 = 报名人数 + 1
WHERE ID = 1234
AND 报名人数 < 人数限制 -- 关键条件

IF @@ROWCOUNT <> 0
BEGIN
-- 再插入明细
INSERT 报名明细(活动ID,人) VALUES(1234,'张三')

RETURN 1 -- 报名成功
END
ELSE
RETURN 0 -- 报名失败
专注or全面 2015-11-01
  • 打赏
  • 举报
回复
如果在数据库中,你要判断剩余名额的时候就锁定对应的表,也就是说,每次只能有一个会话去进行判断,等这个会话判断完成并且执行完业务操作之后,再由其他会话去进行判断。

跟这个问题一样的http://bbs.csdn.net/topics/391851726
Q315054403 2015-11-01
  • 打赏
  • 举报
回复
可以在活动上加个已报名数,且约束<=60,报名成功一个就加1 或者在查询时就加事务/With (UpdLock)
leonbingo 2015-11-01
  • 打赏
  • 举报
回复
问题是本来只能报名50个,结果报名了超过50个,限制不住
shoppo0505 2015-10-30
  • 打赏
  • 举报
回复
那就只能一个一个报啊。不知道你的问题是什么。 你就是同时报名,就数据库处理来说,也肯定会有先后的。

22,209

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧