0Pricing
SQL Academy · Leçon

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 ; NEW et OLD sont 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 NEW pour poursuivre avec cette ligne
  • Renvoyez NEW modifié pour changer ce qui est stocké
  • Renvoyez NULL pour 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

  1. Anatomie des déclencheurs : BEFORE/AFTER, FOR EACH ROW
  2. Bases des fonctions PL/pgSQL
  3. Blocs DO et code anonyme
  4. Auditer des tables avec des déclencheurs
← Retour à SQL Academy