私は本当にSQLに問題はありますが、データベースを保持しようとしています可能な限りシンプルで最小限のものにする。値を複製せず、代わりに参照とIDを使用する。今#1442 - ストアドファンクション/トリガでテーブル '*'を更新できません。このストアドファンクション/トリガを起動したステートメントで既に使用されています。
クエリを挿入した後、私はエラー
を呼び出したストアド・ファンクション/トリガに「署名しました」1442を取得する - それは、すでに文で使用されているため、テーブルを更新することはできませんが、この保存された機能/トリガ
トリガーが無効のときにクエリを挿入できます。しかし、私のクエリはテーブル 'users'からのみ読み込みを行うので、競合は起こらないはずです。私はデッドロックについて何かを読んでいます - クエリはそれを使用している間などのテーブルをロックしているため、トリガは行を更新できません。どのように私はこれを達成することができますアイデア?
私はクエリを簡略化し、重要なことだけが存在するようにしました。
問合せ:
INSERT INTO signed (time_of_start, player)
SELECT time_of_game_id, users.user_id
FROM time_of_game, users
WHERE time_of_game.time_of_start = "2017-02-01 12:00:00"
AND users.steamid = "123456789";
トリガー:それはすでにこのトリガーを起動しますINSERT INTO.. SELECT
クエリによって読まれているため
CREATE TRIGGER `payment_for_joining`
AFTER INSERT ON `signed`
FOR EACH ROW
UPDATE users
SET users.credit = users.credit-1
WHERE users.user_id = NEW.player
私はちょうど1つのリクエスト/クエリでこの2つの操作を実行できることを期待していました。しかし、私は経験豊富なプログラマーからのヒントを取るつもりです、私はあなたのソリューションを使用:)ありがとう – Vergil333