假设您的桌子上有一些中奖号码。这些数字中的任何一个都只能由一个人“赢”。

我该如何防止2个同时提交相同编号的Web请求同时检查并看到这些编号仍然可用,然后在编号被标记为不再可用之前将奖品授予这两个。

this question中获奖的解决方案感觉就像我在想的那样,因为它也可以应用于大多数数据库平台。

还有其他通用模式可以应用于此吗?

最佳答案

这些数字是随机生成的还是什么?

我将依赖于数据库本身中的事务语义:创建一个具有两列(数字和已声明)的表,并使用单个更新:

UPDATE winners SET claimed=1 WHERE claimed=0 AND number=@num;


然后检查受影响的行数。

07-28 13:55