如何防止多个Web请求处理相同的记录?

fei*_*ief 0 php mysql sql-server

假设你有一张桌子上有一些中奖号码.这些数字中的任何一个都只是由一个人"赢得".

我怎样才能阻止2个同时提交相同号码的网络请求,同时检查并看到这些号码仍然可用,然后在号码被标记为不再可用之前将奖励提供给他们.

这个问题的获胜解决方案感觉就像我在想的那样,因为它也可以应用于大多数数据库平台.

还有其他常见的模式可以应用于此吗?

Dar*_*con 6

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

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

UPDATE winners SET claimed=1 WHERE claimed=0 AND number=@num;
Run Code Online (Sandbox Code Playgroud)

然后检查受影响的行数.