InnoDBエンジンを搭載したMySQLにテーブルv_extがあります:-id
:主キー
-コード:事前に生成されたコードのリスト(たとえば、1000個のコードがランダムに生成されます)
-user_id:最初はNULL
ユーザーがアイテムを購入すると、コードを受け取ります。user_id列に入力するようにテーブルを更新する必要があります。私には2つの選択肢があります:
START TRANSACTION;
SELECT id FROM v_ext WHERE user_id IS NULL LIMIT 1 FOR UPDATE; -- return id 54 for ex.
UPDATE v_ext SET user_id=xxx WHERE id=54;
COMMIT;
また
UPDATE v_ext SET user_id=xxx WHERE user_id IS NULL LIMIT 1;
何千人ものユーザーが同時に購入している場合、2番目のオプションは安全ですか?もしそうなら、この2番目のオプションは1つのクエリしか必要としないため、パフォーマンスに優れていると想定するのは正しいですか?