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.ID
i stedet forDelivery.ID
. - Brug SQL-92
JOIN
syntaks i stedet for SQL-89 "kommastil" joins. - Brug multi-table
UPDATE
med joins i stedet forEXISTS
med korreleret underforespørgsel. - Brug enkelte anførselstegn til strenge i stedet for dobbelte anførselstegn.
- Afslut
UPDATE
sætning med semikolon.