Spoušť, kterou ukazujete výše, je v pořádku.
upravit: Když vytvoříte spouštěč v GUI phpMyAdmin, stačí zadat tělo spouštěče do Definice panel, jinými slovy část BEGIN...END .
Je to proto, že phpMyAdmin se bude snažit být chytrý a napsat spouštěcí hlavičku za vás na základě ostatních prvků, které zadáte (jméno, stůl, čas, událost).
Zde je správný způsob, jak definovat spouštěč v phpMyAdmin:

Pokud napíšete CREATE TRIGGER... hlavičku uvnitř těla, bude to matoucí MySQL, protože uvidí CREATE TRIGGER... CREATE TRIGGER... BEGIN...END . Díky tomu si MySQL myslí, že definujete spouštěč, jehož první příkaz je CREATE TRIGGER .
Jako vedlejší problém z vaší původní otázky bych navrhl nějaké změny v těle spouště:
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
Změny:
- Referenční
NEW.IDmístoDelivery.ID. - Použijte SQL-92
JOINsyntaxe namísto SQL-89 „comma style“ joins. - Použijte
UPDATEpro více tabulek se spojeními namístoEXISTSs korelovaným poddotazem. - Pro řetězce používejte jednoduché uvozovky namísto dvojitých.
- Ukončete
UPDATEprohlášení se středníkem.