Triggeren du viser ovenfor er fin.
rediger: Når du opretter en trigger i phpMyAdmins GUI, behøver du kun at indtaste udløserens krop i Definition rude, med andre ord delen BEGIN...END .
Dette er fordi phpMyAdmin vil prøve at være klog og skrive trigger-headeren for dig baseret på de andre elementer, du indtaster (navn, tabel, tidspunkt, begivenhed).
Her er den rigtige måde at definere en trigger i phpMyAdmin:

Hvis du skriver CREATE TRIGGER... header inde i kroppen, vil den forvirre MySQL, fordi den vil se CREATE TRIGGER... CREATE TRIGGER... BEGIN...END . Dette får MySQL til at tro, at du definerer en trigger, hvis første sætning er CREATE TRIGGER .
Som et sideproblem fra dit oprindelige spørgsmål vil jeg foreslå nogle ændringer i udløserens krop:
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
Ændringerne:
- Reference
NEW.IDi stedet forDelivery.ID. - Brug SQL-92
JOINsyntaks i stedet for SQL-89 "kommastil" joins. - Brug multi-table
UPDATEmed joins i stedet forEXISTSmed korreleret underforespørgsel. - Brug enkelte anførselstegn til strenge i stedet for dobbelte anførselstegn.
- Afslut
UPDATEsætning med semikolon.