Anatomie des déclencheurs : BEFORE/AFTER, FOR EACH ROW
Comprenez le moment d’exécution et la granularité des déclencheurs (ligne ou instruction), ainsi que la signification de NEW et OLD dans une fonction de déclencheur.
Anatomie des déclencheurs : BEFORE/AFTER, FOR EACH ROW est une leçon SQL Academy gratuite sur CoddyKit. Ceci est la leçon 1 sur 4. Tu peux lire la leçon complète ci-dessous gratuitement — puis la pratiquer en direct dans le navigateur avec un éditeur de code intégré et un tuteur IA 24/7. Elle fait partie du parcours d'apprentissage SQL Academy, et ta progression se synchronise sur le web et l'application CoddyKit. Le cours SQL Academy comprend 4 leçons au total.
Qu’est-ce qu’un déclencheur ?
Un déclencheur est une fonction que la base de données appelle automatiquement avant ou après un INSERT, UPDATE, DELETE ou TRUNCATE sur une table.
Deux éléments : fonction + déclencheur
Vous écrivez une fonction qui renvoie trigger, puis vous l’associez à une table :
CREATE OR REPLACE FUNCTION set_updated_at()
RETURNS TRIGGER AS $$
BEGIN
NEW.updated_at := NOW();
RETURN NEW;
END;
$$ LANGUAGE plpgsql;
CREATE TRIGGER trg_set_updated_at
BEFORE UPDATE ON users
FOR EACH ROW EXECUTE FUNCTION set_updated_at();BEFORE contre AFTER
- BEFORE — se déclenche avant l’écriture de la ligne ; peut modifier NEW
- AFTER — se déclenche après l’écriture ; pour les effets secondaires (audit, notifications)
FOR EACH ROW contre FOR EACH STATEMENT
- FOR EACH ROW — s’exécute une fois par ligne concernée ;
NEWetOLDsont disponibles - FOR EACH STATEMENT — s’exécute une fois par instruction, sans accès ligne par ligne
NEW et OLD
Dans un déclencheur ligne par ligne :
NEW— la nouvelle ligne (INSERT, UPDATE)OLD— la ligne précédente (UPDATE, DELETE)
La valeur de retour compte
Pour les déclencheurs ligne par ligne BEFORE :
- Renvoyez
NEWpour poursuivre avec cette ligne - Renvoyez
NEWmodifié pour changer ce qui est stocké - Renvoyez
NULLpour annuler l’opération sur cette ligne
Filtre WHEN
Déclenchement conditionnel :
CREATE TRIGGER trg_log_status
AFTER UPDATE OF status ON orders
FOR EACH ROW WHEN (OLD.status IS DISTINCT FROM NEW.status)
EXECUTE FUNCTION log_status_change();OF colonne
BEFORE/AFTER UPDATE peut se déclencher uniquement lorsque certaines colonnes sont modifiées :
CREATE TRIGGER ... AFTER UPDATE OF status ON orders ...Plusieurs déclencheurs
Les déclencheurs se déclenchent dans l’ordre alphabétique de leur nom. Utilisez des préfixes (00_, 10_, ...) pour contrôler l’ordre.
Performances des déclencheurs
Les déclencheurs ligne par ligne se déclenchent pour chaque ligne — une logique lourde dans un déclencheur ligne par ligne × un grand volume de DML = lenteur. Préférez les déclencheurs par instruction pour les effets secondaires en masse.
Désactiver les déclencheurs
Ignorer temporairement :
ALTER TABLE orders DISABLE TRIGGER trg_audit;
-- bulk load...
ALTER TABLE orders ENABLE TRIGGER trg_audit;
-- Disable ALL triggers (use carefully):
ALTER TABLE orders DISABLE TRIGGER ALL;Récursion des déclencheurs
Un UPDATE déclenché sur la même table déclenche à nouveau le déclencheur. Utilisez des garde-fous (pg_trigger_depth()) ou concevez votre système avec précaution.
Récapitulatif
Les déclencheurs automatisent les réactions ligne par ligne.
- Fonction renvoyant TRIGGER + CREATE TRIGGER
- BEFORE pour modifier, AFTER pour les effets secondaires
- NEW/OLD pour accéder aux lignes
- WHEN et OF colonne pour cibler les déclenchements
Vérification rapide
Vous voulez mettre automatiquement à jour une colonne updated_at à chaque modification de ligne. Quelle configuration de déclencheur choisiriez-vous ?
Questions Fréquemment Posées
La leçon « Anatomie des déclencheurs : BEFORE/AFTER, FOR EACH ROW » est-elle gratuite ?
Oui — le texte complet de « Anatomie des déclencheurs : BEFORE/AFTER, FOR EACH ROW » est gratuit à lire ici sur le web. Pour la pratiquer de manière interactive (un éditeur de code intégré et un tuteur IA 24/7) et déverrouiller le reste du cours SQL Academy, passe à CoddyKit PRO. Le cours SQL Academy comprend 4 leçons au total.
Qu'est-ce que j'apprendrai dans « Anatomie des déclencheurs : BEFORE/AFTER, FOR EACH ROW » ?
Comprenez le moment d’exécution et la granularité des déclencheurs (ligne ou instruction), ainsi que la signification de NEW et OLD dans une fonction de déclencheur. Tu pratiques SQL Academy avec du code pratique que tu exécutes directement dans le navigateur, et un tuteur IA 24/7 répond à tes questions au fur et à mesure que tu avances dans la leçon.
Dois-je avoir de l'expérience pour commencer SQL Academy ?
Aucune expérience préalable n'est requise. SQL Academy sur CoddyKit est structuré pour les débutants jusqu'aux apprenants avancés, donc tu peux commencer ici ou depuis le début et avancer à ton rythme. Ceci est la leçon 1 sur 4.
Combien de temps prend la leçon « Anatomie des déclencheurs : BEFORE/AFTER, FOR EACH ROW » ?
La plupart des leçons CoddyKit prennent environ 5–10 minutes. Chacune est courte et interactive, tu progresses régulièrement et tu repiques exactement où tu t'es arrêté sur le web et l'app.
Peux-tu écrire et exécuter du code dans cette leçon SQL Academy ?
Oui. Chaque leçon SQL Academy inclut un éditeur de code intégré, tu écris et exécutes du vrai code directement dans ton navigateur et tu reçois des retours IA instantanés — aucune configuration locale requise.
Toutes les leçons de ce cours
- Anatomie des déclencheurs : BEFORE/AFTER, FOR EACH ROW
- Bases des fonctions PL/pgSQL
- Blocs DO et code anonyme
- Auditer des tables avec des déclencheurs