SQLステートメントはアトミックです。つまり、次のようなものを実行した場合:
UPDATE Cars SET Sold = Sold + 1
Sold
は誰も変更できません このステートメント中の変数。他の誰かが同じステートメントを同時に実行している場合でも、常に1ずつ増加します。
相互に依存するステートメントがある場合、問題が発生します:
a = SELECT Sold FROM Cars;
UPDATE Cars SET Sold = a + 1;
これらのクエリの間に、別のユーザーがテーブルCarsを変更してSoldを更新できます。これを防ぐには、トランザクションでラップします:
BEGIN;
a = SELECT Sold FROM Cars;
UPDATE Cars SET Sold = a + 1;
COMMIT;
トランザクションはInnoDBでサポートされていますが、MyISAMではサポートされていません。