上に示したトリガーは問題ありません。
編集: 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.IDDelivery.IDの代わりに 。 - SQL-92
JOINを使用する SQL-89の「コンマスタイル」結合の代わりに構文。 - マルチテーブルの
UPDATEを使用するEXISTSの代わりに結合を使用 相関サブクエリを使用します。 - 文字列には、二重引用符ではなく一重引用符を使用します。
-
UPDATEを終了します セミコロン付きのステートメント。