Avant ou après
Lorsqu'un trigger est déclenché, ses instructions peuvent être exécutées à deux moments différents. Soit juste avant que
l'événement déclencheur n'ait lieu (BEFORE), soit juste après (AFTER).
Donc, si vous avez un trigger BEFORE UPDATE sur la table A, l'exécution d'une requête UPDATE sur cette table va d'abord
déclencher l'exécution des instructions du trigger, ensuite seulement les lignes de la table seront modifiées.
Exemple
Pour créer un trigger sur la table Animal, déclenché par une insertion, et s'exécutant après ladite insertion, on utilisera la syntaxe
suivante :
Code : SQL
CREATE TRIGGER after_insert_animal AFTER INSERT
ON Animal FOR EACH ROW
corps_trigger;
Règle et convention
Il ne peut exister qu'un seul trigger par combinaison moment_trigger/evenement_trigger par table. Donc un seul
trigger BEFORE UPDATE par table, un seul AFTER DELETE, etc.
Étant donné qu'il existe deux possibilités pour le moment d'exécution, et trois pour l'événement déclencheur, on a donc un
maximum de six triggers par table.
Cette règle étant établie, il existe une convention quant à la manière de nommer ses triggers, que je vous encourage à suivre :
nom_trigger = moment_evenement_table. Donc le trigger BEFORE UPDATE ON Animal aura pour nom :
before_update_animal.
OLD et NEW
Dans le corps du trigger, MySQL met à disposition deux mots-clés : OLD et NEW.
OLD : représente les valeurs des colonnes de la ligne traitée avant qu'elle ne soit modifiée par l'événement déclencheur.
Ces valeurs peuvent être lues, mais pas modifiées.
NEW : représente les valeurs des colonnes de la ligne traitée après qu'elle a été modifiée par l'événement déclencheur.
Ces valeurs peuvent être lues et modifiées.
Il n'y a que dans le cas d'un trigger UPDATE que OLD et NEW coexistent. Lors d'une insertion, OLD n'existe pas, puisque la ligne
n'existe pas avant l'événement déclencheur ; dans le cas d'une suppression, c'est NEW qui n'existe pas, puisque la ligne n'existera
plus après l'événement déclencheur.
Premier exemple : l'insertion d'une ligne.
Exécutons la commande suivante :
Code : SQL
INSERT INTO Adoption (client_id, animal_id, date_reservation, prix,
paye)
VALUES (12, 15, NOW(), 200.00, FALSE);
Pendant le traitement de cette ligne par le trigger correspondant,
NEW.client_id vaudra 12 ;
Partie 5 : Sécuriser et automatiser ses actions
312/414
www.openclassrooms.com
Lorsqu'un trigger est déclenché, ses instructions peuvent être exécutées à deux moments différents. Soit juste avant que
l'événement déclencheur n'ait lieu (BEFORE), soit juste après (AFTER).
Donc, si vous avez un trigger BEFORE UPDATE sur la table A, l'exécution d'une requête UPDATE sur cette table va d'abord
déclencher l'exécution des instructions du trigger, ensuite seulement les lignes de la table seront modifiées.
Exemple
Pour créer un trigger sur la table Animal, déclenché par une insertion, et s'exécutant après ladite insertion, on utilisera la syntaxe
suivante :
Code : SQL
CREATE TRIGGER after_insert_animal AFTER INSERT
ON Animal FOR EACH ROW
corps_trigger;
Règle et convention
Il ne peut exister qu'un seul trigger par combinaison moment_trigger/evenement_trigger par table. Donc un seul
trigger BEFORE UPDATE par table, un seul AFTER DELETE, etc.
Étant donné qu'il existe deux possibilités pour le moment d'exécution, et trois pour l'événement déclencheur, on a donc un
maximum de six triggers par table.
Cette règle étant établie, il existe une convention quant à la manière de nommer ses triggers, que je vous encourage à suivre :
nom_trigger = moment_evenement_table. Donc le trigger BEFORE UPDATE ON Animal aura pour nom :
before_update_animal.
OLD et NEW
Dans le corps du trigger, MySQL met à disposition deux mots-clés : OLD et NEW.
OLD : représente les valeurs des colonnes de la ligne traitée avant qu'elle ne soit modifiée par l'événement déclencheur.
Ces valeurs peuvent être lues, mais pas modifiées.
NEW : représente les valeurs des colonnes de la ligne traitée après qu'elle a été modifiée par l'événement déclencheur.
Ces valeurs peuvent être lues et modifiées.
Il n'y a que dans le cas d'un trigger UPDATE que OLD et NEW coexistent. Lors d'une insertion, OLD n'existe pas, puisque la ligne
n'existe pas avant l'événement déclencheur ; dans le cas d'une suppression, c'est NEW qui n'existe pas, puisque la ligne n'existera
plus après l'événement déclencheur.
Premier exemple : l'insertion d'une ligne.
Exécutons la commande suivante :
Code : SQL
INSERT INTO Adoption (client_id, animal_id, date_reservation, prix,
paye)
VALUES (12, 15, NOW(), 200.00, FALSE);
Pendant le traitement de cette ligne par le trigger correspondant,
NEW.client_id vaudra 12 ;
Partie 5 : Sécuriser et automatiser ses actions
312/414
www.openclassrooms.com
