假设您的桌子上有一些中奖号码。这些数字中的任何一个都只能由一个人“赢”。
我该如何防止2个同时提交相同编号的Web请求同时检查并看到这些编号仍然可用,然后在编号被标记为不再可用之前将奖品授予这两个。
this question中获奖的解决方案感觉就像我在想的那样,因为它也可以应用于大多数数据库平台。
还有其他通用模式可以应用于此吗?
最佳答案
这些数字是随机生成的还是什么?
我将依赖于数据库本身中的事务语义:创建一个具有两列(数字和已声明)的表,并使用单个更新:
UPDATE winners SET claimed=1 WHERE claimed=0 AND number=@num;
然后检查受影响的行数。