De trigger die je hierboven laat zien is prima.
bewerken: Wanneer u een trigger aanmaakt in de GUI van phpMyAdmin, hoeft u alleen de hoofdtekst van de trigger in te voeren in de Definitie paneel, met andere woorden het deel BEGIN...END .
Dit komt omdat phpMyAdmin zal proberen slim te zijn en de triggerheader voor u zal schrijven op basis van de andere elementen die u invoert (naam, tabel, tijd, evenement).
Dit is de juiste manier om een trigger in phpMyAdmin te definiëren:

Als u de CREATE TRIGGER... . schrijft header in de body, het zal MySQL verwarren omdat het CREATE TRIGGER... CREATE TRIGGER... BEGIN...END zal zien . Hierdoor denkt MySQL dat u een trigger definieert waarvan de eerste instructie CREATE TRIGGER is .
Als een bijzaak van uw oorspronkelijke vraag, zou ik enkele wijzigingen in de hoofdtekst van de trigger voorstellen:
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
De wijzigingen:
- Referentie
NEW.IDin plaats vanDelivery.ID. - Gebruik SQL-92
JOINsyntaxis in plaats van SQL-89 "kommastijl" joins. - Gebruik multi-table
UPDATEmet joins, in plaats vanEXISTSmet gecorreleerde subquery. - Gebruik enkele aanhalingstekens voor strings in plaats van dubbele aanhalingstekens.
- Beëindig de
UPDATEstatement met een puntkomma.