CREATE TRIGGER / DROP TRIGGER#
avancé
Syntaxe#
CREATE [TEMP|TEMPORARY] TRIGGER [IF NOT EXISTS] nom_trigger
[BEFORE|AFTER|INSTEAD OF] [INSERT|UPDATE [OF colonnes]|DELETE] ON table
[FOR EACH ROW]
[WHEN condition]
BEGIN
instructions;
END;
DROP TRIGGER [IF EXISTS] nom_trigger;
Exemples#
CREATE TRIGGER maj_date
AFTER UPDATE ON etudiants
FOR EACH ROW
WHEN NEW.modifie_le IS OLD.modifie_le
BEGIN
UPDATE etudiants SET modifie_le = CURRENT_TIMESTAMP WHERE id = NEW.id;
END;
CREATE TRIGGER log_suppression
AFTER DELETE ON etudiants
BEGIN
INSERT INTO log (action, etudiant_id) VALUES ('delete', OLD.id);
END;
DROP TRIGGER maj_date;
Références disponibles#
| Contexte | OLD |
NEW |
|---|---|---|
INSERT |
non | oui |
UPDATE |
oui | oui |
DELETE |
oui | non |
SQLite
FOR EACH ROW est implicite et obligatoire (pas de trigger niveau instruction). INSTEAD OF uniquement sur les vues.
Récursion
Un trigger AFTER UPDATE qui met à jour sa propre table se redéclenche si PRAGMA recursive_triggers = ON (désactivé par défaut). Toujours ajouter une clause WHEN qui coupe la boucle.