Triggern du visar ovan är bra.
redigera: När du skapar en utlösare i gränssnittet för phpMyAdmin behöver du bara ange utlösarens kropp i Definition rutan, med andra ord delen BEGIN...END
.
Detta beror på att phpMyAdmin kommer att försöka vara smart och skriva utlösarhuvudet åt dig baserat på de andra elementen du anger (namn, tabell, tid, händelse).
Här är rätt sätt att definiera en utlösare i phpMyAdmin:
Om du skriver CREATE TRIGGER...
header inuti kroppen, kommer den att förvirra MySQL eftersom den kommer att se CREATE TRIGGER... CREATE TRIGGER... BEGIN...END
. Detta gör att MySQL tror att du definierar en trigger vars första sats är CREATE TRIGGER
.
Som ett sidoproblem från din ursprungliga fråga skulle jag föreslå några ändringar i utlösarens kropp:
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
Ändringarna:
- Referens
NEW.ID
istället förDelivery.ID
. - Använd SQL-92
JOIN
syntax istället för SQL-89 "comma style" joins. - Använd multi-table
UPDATE
med kopplingar, istället förEXISTS
med korrelerad underfråga. - Använd enkla citattecken för strängar istället för dubbla citattecken.
- Avsluta
UPDATE
uttalande med semikolon.