Il trigger che mostri sopra va bene.
modifica: Quando crei un trigger nella GUI di phpMyAdmin, devi solo inserire il corpo del trigger nella Definizione riquadro, ovvero la parte BEGIN...END
.
Questo perché phpMyAdmin cercherà di essere intelligente e scrivere l'intestazione del trigger per te in base agli altri elementi che inserisci (nome, tabella, ora, evento).
Ecco il modo giusto per definire un trigger in phpMyAdmin:
Se scrivi CREATE TRIGGER...
header all'interno del corpo, confonderà MySQL perché vedrà CREATE TRIGGER... CREATE TRIGGER... BEGIN...END
. Questo fa pensare a MySQL che stai definendo un trigger la cui prima istruzione è CREATE TRIGGER
.
Come problema collaterale della tua domanda originale, suggerirei alcune modifiche nel corpo del trigger:
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
Le modifiche:
- Riferimento
NEW.ID
invece diDelivery.ID
. - Usa SQL-92
JOIN
sintassi anziché SQL-89 "stile virgola" join. - Usa
UPDATE
multi-tabella con join, invece diEXISTS
con subquery correlata. - Utilizza le virgolette singole per le stringhe invece delle virgolette doppie.
- Termina l'
UPDATE
frase con un punto e virgola.