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.ID
in plaats vanDelivery.ID
. - Gebruik SQL-92
JOIN
syntaxis in plaats van SQL-89 "kommastijl" joins. - Gebruik multi-table
UPDATE
met joins, in plaats vanEXISTS
met gecorreleerde subquery. - Gebruik enkele aanhalingstekens voor strings in plaats van dubbele aanhalingstekens.
- Beëindig de
UPDATE
statement met een puntkomma.