Les déclencheurs
Un trigger s'exécute BEFORE ou AFTER un INSERT/UPDATE/DELETE. Les pseudo-lignes NEW et OLD donnent accès aux données.
DELIMITER $$ CREATE TRIGGER trg_litres_positifs BEFORE INSERT ON commande FOR EACH ROW BEGIN IF NEW.litres < 0 THEN SET NEW.litres = 0; END IF; END $$ DELIMITER ;
| Opération | OLD | NEW |
|---|---|---|
| INSERT | — | disponible |
| UPDATE | ancienne | nouvelle |
| DELETE | disponible | — |
Un trigger d'audit
DELIMITER $$
CREATE TRIGGER trg_commande_suppr
AFTER DELETE ON commande
FOR EACH ROW
BEGIN
INSERT INTO journal (table_cible, cle, action, le)
VALUES ('commande', OLD.id, 'DELETE', NOW());
END $$
DELIMITER ;
Effets de bord invisibles — un trigger agit en coulisse et complique le débogage. Documentez-les ; n'y cachez pas de logique métier essentielle.
Les événements planifiés
Un événement exécute du SQL selon une planification (il faut activer le planificateur).
SET GLOBAL event_scheduler = ON; CREATE EVENT ev_cloture_auto ON SCHEDULE EVERY 1 DAY DO UPDATE campagne SET statut = 'CLOTUREE' WHERE statut = 'OUVERTE' AND date_cloture < CURDATE();
🛢️ Sur le projet Fioul Groupé
Deux automatismes utiles au projet : un trigger qui refuse un volume négatif à l'inscription, et un événement quotidien qui clôture automatiquement les campagnes dont la date limite est passée — sans dépendre d'un cron externe.
À retenir
- Un trigger réagit BEFORE/AFTER une écriture ; NEW/OLD exposent les données.
- Cas d'usage : validation, valeurs par défaut calculées, journalisation.
- Un événement exécute du SQL planifié (scheduler à activer).
- Fil rouge : clôture automatique des campagnes échues.