Aller au contenu

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.