1
START TRANSACTION;
SELECT @A:=SUM(salary) FROM table1 WHERE type=1 FOR UPDATE;
UPDATE table2 SET summary=@A WHERE type=1;
COMMIT;

私はこのクエリをMySQLの公式ドキュメントから直接取得しましたが、特定の側面について疑問に思っています(FOR UPDATEを自分で追加しました)。レコードをすでにロックしている別のユーザーがいるとします。その場合、更新は失敗するはずです。それが起こった場合、レコードにロックがあることをユーザーに警告するメッセージボックスをユーザーに表示する方法を確実に望んでいます。その情報をPHPに戻すにはどうすればよいですか?また、このクエリはデフォルトでロールバックされませんか、それとも特にROLLBACKを追加する必要がありますか?

前もって感謝します!

4

1 に答える 1

1

autocommit変数の値をOFF / 0 / FALSEにリセットする必要があります。これを試して:

SET SESSION autocommit = 0;
START TRANSACTION;
SELECT @A:=SUM(salary) FROM table1 WHERE type=1 FOR UPDATE;
UPDATE table2 SET summary=@A WHERE type=1;
COMMIT;
于 2012-12-10T10:52:43.307 に答える