私は小さなゲームのマッチメイキング システムを構築しています。対戦相手を探しているすべてのプレイヤーを保存するテーブルは次のようになります。
lobby
----------
userID
points
range
opponentID
スクリプトは 5 秒ごとに、特定のポイント範囲内で対戦相手を見つけようとします。
UPDATE lobby SET
opponentID = {myUserID}
WHERE points >= {myPoints} - {myRange} AND points <= {myPoints} + {myRange}
AND opponentID = 0 AND userID != {myUserID}
ORDER BY ABS(points - {myPoints}) ASC
LIMIT 1
影響を受ける行がある場合は、現在のプレイヤーをロビーから削除し、対戦相手の ID を取得します。
DELETE FROM lobby
WHERE userID = {myUserID}
SELECT userID FROM lobby
WHERE opponentID = {myUserID}
今私の恐れは、UPDATE と DELETE の間に誰かが現在のユーザーを割り当てることです。どうすればこれを防ぐことができますか? UPDATE と DELETE を組み合わせることはできますか?