您将要锁定奖金记录。因此,如果您不打算使用winner_id之类的东西,请在奖品表上添加一些可用性标志(也许具有默认值)。像这样的东西:
SELECt id FROM prizes WHERe ... AND available = 1 FOR UPDATE
然后,如果您确实分配奖品,请设置可用性:
UPDATE prizes SET available = 0 WHERe id = ...
当然,您需要将其包装在一个事务中。
确保 每次 检查奖金是否可用时,都将其添加
AND available = 1 FORUPDATE到查询中,因为
SELECT没有的a不会
FOR UPDATE等待锁定。



