上に示したトリガーは問題ありません。
編集: phpMyAdminのGUIでトリガーを作成する場合、定義にトリガーの本体を入力するだけで済みます。 ペイン、言い換えると、パーツBEGIN...END
。
これは、phpMyAdminが巧妙になり、入力した他の要素(名前、テーブル、時間、イベント)に基づいてトリガーヘッダーを書き込もうとするためです。
phpMyAdminでトリガーを定義する正しい方法は次のとおりです。
CREATE TRIGGER...
を作成する場合 本文内のヘッダーでは、CREATE TRIGGER... CREATE TRIGGER... BEGIN...END
が表示されるため、MySQLが混乱します。 。これにより、MySQLは、最初のステートメントがCREATE TRIGGER
であるトリガーを定義していると見なします。 。
元の質問の副次的な問題として、トリガーの本体にいくつかの変更を加えることをお勧めします:
CREATE TRIGGER Update_Last_Transit_Status AFTER INSERT ON Delivery
FOR EACH ROW
BEGIN
UPDATE Transportation
INNER JOIN Transit ON Transit.Transportation_ID = Transportation.ID
INNER JOIN Route ON Transit.ID = Route.Transit_ID
SET Transportation.Status = 'Dispatched'
WHERE Route.Delivery_ID = NEW.ID
AND Transportation.Status = 'In Branch';
END
変更点:
- 参照
NEW.ID
Delivery.ID
の代わりに 。 - SQL-92
JOIN
を使用する SQL-89の「コンマスタイル」結合の代わりに構文。 - マルチテーブルの
UPDATE
を使用するEXISTS
の代わりに結合を使用 相関サブクエリを使用します。 - 文字列には、二重引用符ではなく一重引用符を使用します。
-
UPDATE
を終了します セミコロン付きのステートメント。