Spust, który pokazujesz powyżej, jest w porządku.
edytuj: Kiedy tworzysz wyzwalacz w GUI phpMyAdmin, wystarczy wprowadzić treść wyzwalacza w Definicji okienko, czyli część BEGIN...END
.
Dzieje się tak, ponieważ phpMyAdmin będzie starał się być sprytny i napisać dla ciebie nagłówek wyzwalacza na podstawie innych wprowadzonych elementów (nazwa, tabela, godzina, wydarzenie).
Oto właściwy sposób zdefiniowania wyzwalacza w phpMyAdmin:
Jeśli napiszesz CREATE TRIGGER...
nagłówek wewnątrz ciała, zmyli MySQL, ponieważ zobaczy CREATE TRIGGER... CREATE TRIGGER... BEGIN...END
. To sprawia, że MySQL myśli, że definiujesz wyzwalacz, którego pierwszą instrukcją jest CREATE TRIGGER
.
Jako kwestię poboczną w twoim pierwotnym pytaniu sugeruję pewne zmiany w treści wyzwalacza:
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
Zmiany:
- Odniesienie
NEW.ID
zamiastDelivery.ID
. - Użyj SQL-92
JOIN
składnia zamiast sprzężeń w stylu przecinka SQL-89. - Użyj wielu tabel
UPDATE
ze złączeniami, zamiastEXISTS
ze skorelowanym podzapytaniem. - Użyj pojedynczych cudzysłowów dla ciągów zamiast podwójnych cudzysłowów.
- Zakończ
UPDATE
oświadczenie ze średnikiem.