次のクエリを作成する予定です。
INSERT INTO summary (user_id, total_points, count_operations)
SELECT
15 AS user_id,
(SELECT SUM(points) FROM operations WHERE user_id = 15) AS total_points,
(SELECT COUNT(*) FROM operations WHERE user_id = 15) AS count_operations
ON DUPLICATE KEY UPDATE
total_points = VALUES(total_points),
count_operations = VALUES(count_operations);
ステートメント全体がアトミックですか? つまり、MySQL (MyISAM エンジンを使用) はoperations
テーブルを内部的にロックしますか?
MySQL が 2 つのサブクエリを順次実行する可能性はありますか? その結果、(その時間枠内に新しい操作が追加された場合)total_points
とcount_operations
が矛盾する場合がありますか?