Le déclencheur que vous montrez ci-dessus est très bien.
modifier : Lorsque vous créez un déclencheur dans l'interface graphique de phpMyAdmin, il vous suffit de saisir le corps du déclencheur dans la Définition volet, c'est-à-dire la partie BEGIN...END
.
En effet, phpMyAdmin va essayer d'être intelligent et écrire l'en-tête du déclencheur pour vous en fonction des autres éléments que vous entrez (nom, table, heure, événement).
Voici la bonne façon de définir un déclencheur dans phpMyAdmin :
Si vous écrivez le CREATE TRIGGER...
en-tête à l'intérieur du corps, il confondra MySQL car il verra CREATE TRIGGER... CREATE TRIGGER... BEGIN...END
. Cela fait penser à MySQL que vous définissez un déclencheur dont la première instruction est CREATE TRIGGER
.
En complément de votre question initiale, je suggérerais quelques modifications dans le corps du déclencheur :
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
Les changements :
- Référence
NEW.ID
au lieu deDelivery.ID
. - Utilisez SQL-92
JOIN
syntaxe au lieu des jointures "style virgule" SQL-89. - Utiliser plusieurs tables
UPDATE
avec des jointures, au lieu deEXISTS
avec sous-requête corrélée. - Utilisez des guillemets simples pour les chaînes au lieu de guillemets doubles.
- Terminer la
UPDATE
déclaration avec un point-virgule.