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.ID
místoDelivery.ID
. - Použijte SQL-92
JOIN
syntaxe namísto SQL-89 „comma style“ joins. - Použijte
UPDATE
pro více tabulek se spojeními namístoEXISTS
s korelovaným poddotazem. - Pro řetězce používejte jednoduché uvozovky namísto dvojitých.
- Ukončete
UPDATE
prohlášení se středníkem.