1

MySQL トリガーを設定しようとしていますが、やりたいことを正確に行う方法がわかりません。MySQL @variable をセットアップする必要があると思いますが、私が試したことがうまくいかず、適切なリソースを見つけることができませんでした。phpMyAdmin で区切り文字を変更し、以下のコメントは実際のクエリでは使用されません。

CREATE TRIGGER coroner AFTER INSERT ON events
FOR EACH ROW BEGIN
UPDATE teams SET live = live-1 WHERE id = NEW.victim;
UPDATE teams SET score = score+NEW.value WHERE id = NEW.shooter;
UPDATE teams SET last_active = NEW.time WHERE id = NEW.shooter OR id = NEW.victim;
// up to here all works fine
IF (SELECT live FROM teams WHERE id = NEW.victim) = 0 THEN
UPDATE teams SET slot = slot-1 WHERE slot > OLD.slot;
ENDIF;
END

ここで私が実際に行っているのは、サークルに配置されたチームを取り、チームの最後のプレイヤーが排除されたときに、それなしでサークルを閉じることです。

phpMyAdmin からのエラー メッセージは次のとおりです。

#1363 - INSERT トリガーに OLD 行がありません

助けてくれてありがとう


新しい試み:

CREATE TRIGGER coroner AFTER INSERT ON events
FOR EACH ROW BEGIN
UPDATE teams SET live = live-1 WHERE id = NEW.victim;
UPDATE teams SET score = score+NEW.value WHERE id = NEW.shooter;
UPDATE teams SET last_active = NEW.time WHERE id = NEW.shooter OR id = NEW.victim;
SET @pivot := (SELECT slot FROM teams WHERE id = NEW.victim);
IF (SELECT live FROM teams WHERE id = NEW.victim) = 0 THEN
UPDATE teams SET slot = slot+1 WHERE slot < @pivot;
ENDIF;
END

エラー:

#1064 - SQL 構文にエラーがあります。near '; を使用する正しい構文については、MySQL サーバーのバージョンに対応するマニュアルを確認してください。9行目のEND'

4

1 に答える 1

1

ENDIFトリガー言語にはキーワードはありません。代わりEND IFに(スペースを入れて)使用してください。

IFステートメントの構文ドキュメントを確認できます。

于 2010-01-20T05:26:07.883 に答える