でUPDATE FOR SELECTどのように安全ですが、私のクエリです:ここではMySQLの
SET SESSION TRANSACTION ISOLATION LEVEL READ COMMITTED;
START TRANSACTION;
DROP TEMPORARY TABLE IF EXISTS taken;
CREATE TEMPORARY Table taken(
id int,
invoice_id int
);
INSERT INTO taken(id, invoice_id)
SELECT id, $invoice_id FROM `licenses` l
WHERE l.`status` = 0 AND `type` = $type
LIMIT $serial_count
FOR UPDATE;
UPDATE `licenses` SET `status` = 1
WHERE id IN (SELECT id FROM taken);
私は高い同時実行に直面するつもりだ場合は、スレッドセーフで上記のクエリのですか?私はすでに別のレコードに割り当てられているレコードを割り当てたくないということです。
なぜ更新用に別のテーブルを作成する必要があるのですか?1つのクエリでテーブルを更新するだけのことはできませんか? – gbalduzzi
@gbalduzzi私は更新したレコードを知る必要があります。 –
「安全」をどのように定量化しますか? – Strawberry