Académique Documents
Professionnel Documents
Culture Documents
Triggers
5.1 Définition
5.2 Exemples
5.1 Définition
message_at DATETIME);
Lors d’un INSERT, on peut uniquement accéder aux nouvelles valeurs (NEW)
Lors d’un UPDATE, on peut accéder aux anciennes et nouvelles valeurs (avec
OLD et NEW)
Lors d’un DELETE, on peut accéder uniquement aux anciennes valeurs (OLD)
Exemple 1
DELIMITER |
CREATE TRIGGER insMsg BEFORE INSERT ON message
FOR EACH ROW
BEGIN
UPDATE topic SET message_at = NOW() WHERE id_topic = NEW.id_topic;
END; |
Le FOR EACH ROW est obligatoire même si dans notre cas nous ne
traitons qu'un seul enregistrement.
Fotsing Talla Bernard, PhD Bases de Données : Aspects Avancés 128
5.2 Exemples
Exemple 2 :
Supposons que nous voulions supprimer un message, alors la date du topic doit
être mise à jour avec :
Soit la date de l'avant-dernier message s'il existe ;
Autre solution en plaçant le trigger après la suppression. Dans ce cas le message est déjà
supprimé, on recherche donc la date du dernier message s'il existe
.id_topic
Suppression en cascade
Lorsque l'on crée une liaison entre deux tables, on a la possiblité de définir
une suppession en cascade.
Cela signifie que si on supprime un topic, tous ses messages sont supprimés dans la
foulée (sans avoir besoin de trigger).
Le problème c'est que la suppression dans la table mère désactive le trigger DELETE de
la table fille !!! Il faut choisir l'un ou l'autre.