Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Apprendre Déclencheurs | Quelques Sujets Supplémentaires
Techniques Avancées en SQL

bookDéclencheurs

Déclencheurs (triggers) dans les bases de données sont des types particuliers de procédures stockées qui sont exécutées automatiquement ou déclenchées en réponse à certains événements ou actions se produisant dans la base de données.
Ces événements peuvent inclure des insertions, des mises à jour ou des suppressions de données dans les tables, ainsi que des modifications des objets du schéma de la base de données tels que les tables ou les vues.

Remarque

Les déclencheurs ne peuvent pas être invoqués explicitement par les utilisateurs. Ils sont exécutés automatiquement en réponse aux opérations auxquelles ils sont associés.

Déclencheurs DML

Un déclencheur DML (Data Manipulation Language trigger), également appelé déclencheur de langage de manipulation de données, est un objet de base de données qui exécute automatiquement une action spécifiée lorsqu’un certain événement se produit sur une table ou une vue.
Les déclencheurs DML sont souvent utilisés pour appliquer des règles métier, maintenir l’intégrité des données ou effectuer des tâches d’audit.

Types de déclencheurs DML

  • Déclencheurs After : Ces déclencheurs s’exécutent après l’action déclenchante (insertion, mise à jour, suppression) sur la table ;
  • Déclencheurs Before : Ces déclencheurs s’exécutent avant l’action déclenchante. Ils permettent d’intercepter l’action initiale et d’exécuter une logique personnalisée avant de décider de poursuivre ou non l’action initiale.

Exemple de déclencheur After

Nous avons précédemment étudié un exemple d’utilisation d’une transaction pour ajouter des valeurs à la table BankAccounts et à la table UserLogs comme une seule unité logique dans la première section de ce cours.
Désormais, au lieu d’utiliser une transaction, nous pouvons obtenir le même résultat en créant un déclencheur AFTER sur l’opération INSERT dans la table BankAccounts.
Ainsi, il sera uniquement possible d’insérer de nouveaux comptes, et la valeur de journal correspondante sera automatiquement ajoutée par le déclencheur.

-- Create an after-insert trigger for UserLogs
CREATE FUNCTION after_insert_trigger_function()
RETURNS TRIGGER AS $$
BEGIN
    -- Perform some action, like logging the insert
    INSERT INTO UserLogs (account_number, action)
    VALUES (NEW.account_number, CONCAT('New record inserted for ', NEW.account_holder));
    RETURN NEW;
END;
$$ LANGUAGE plpgsql;

-- Attach the trigger to the BankAccounts table
CREATE TRIGGER after_insert_trigger
AFTER INSERT ON BankAccounts
FOR EACH ROW
EXECUTE PROCEDURE after_insert_trigger_function();

Remarque

Dans les déclencheurs PostgreSQL, NEW est une variable d’enregistrement spéciale représentant la nouvelle ligne insérée ou mise à jour dans la table. Elle permet d’accéder aux valeurs des colonnes de la nouvelle ligne à l’intérieur de la fonction du déclencheur.
Si l’on travaille avec des lignes supprimées, il faut utiliser la variable d’enregistrement OLD à la place de NEW.

Exemple de déclencheur Before

Supposons que l’on souhaite empêcher l’ajout de valeurs avec un solde de compte négatif. Nous pouvons créer un déclencheur BEFORE pour cela. Ce déclencheur vérifiera le solde avant l’opération, et s’il est négatif, l’opération ne sera pas effectuée.

-- Create the trigger function
CREATE FUNCTION before_insert_trigger_function() RETURNS TRIGGER AS $$
BEGIN
    -- Check if the account balance is less than 0
    IF (NEW.balance < 0) THEN
        -- If balance is less than 0, do nothing and return
        RAISE NOTICE 'Balance is less than 0. Action not logged.';
    ELSE
        -- If balance is greater than or equal to 0, log the action
        RAISE NOTICE 'Logging insert into UserLogs';
        -- Inserting into the UserLogs table
        INSERT INTO UserLogs (account_number, action)
        VALUES (NEW.account_number, CONCAT('Account created for ', NEW.account_holder));
    END IF;

    -- Indicate that the trigger function has completed successfully
    RETURN NULL;
END;
$$ LANGUAGE plpgsql;

-- Create the trigger
CREATE TRIGGER before_insert_trigger
BEFORE INSERT ON BankAccounts
FOR EACH ROW
EXECUTE PROCEDURE before_insert_trigger_function();

Schéma de création d'un trigger

On observe le schéma typique pour la création de triggers : dans un premier temps, on définit une fonction destinée à exécuter une logique spécifique avant ou après une opération. Ensuite, on associe cette fonction comme trigger à une table et une action désignées.

Veuillez noter que dans l'instruction :

CREATE TRIGGER trigger_name
AFTER INSERT ON table_name
FOR EACH ROW
EXECUTE PROCEDURE proc_name;

nous avons la possibilité d'utiliser UPDATE ou DELETE à la place de l'opération INSERT.
Mais attention : il n'est pas possible de créer des triggers sur SELECT, car l'instruction SELECT ne modifie aucune ligne de la table !

question mark

Quel est le principal objectif de l'utilisation des triggers dans une base de données ?

Select the correct answer

Tout était clair ?

Comment pouvons-nous l'améliorer ?

Merci pour vos commentaires !

Section 3. Chapitre 1

Demandez à l'IA

expand

Demandez à l'IA

ChatGPT

Posez n'importe quelle question ou essayez l'une des questions suggérées pour commencer notre discussion

Awesome!

Completion rate improved to 4.35

bookDéclencheurs

Glissez pour afficher le menu

Déclencheurs (triggers) dans les bases de données sont des types particuliers de procédures stockées qui sont exécutées automatiquement ou déclenchées en réponse à certains événements ou actions se produisant dans la base de données.
Ces événements peuvent inclure des insertions, des mises à jour ou des suppressions de données dans les tables, ainsi que des modifications des objets du schéma de la base de données tels que les tables ou les vues.

Remarque

Les déclencheurs ne peuvent pas être invoqués explicitement par les utilisateurs. Ils sont exécutés automatiquement en réponse aux opérations auxquelles ils sont associés.

Déclencheurs DML

Un déclencheur DML (Data Manipulation Language trigger), également appelé déclencheur de langage de manipulation de données, est un objet de base de données qui exécute automatiquement une action spécifiée lorsqu’un certain événement se produit sur une table ou une vue.
Les déclencheurs DML sont souvent utilisés pour appliquer des règles métier, maintenir l’intégrité des données ou effectuer des tâches d’audit.

Types de déclencheurs DML

  • Déclencheurs After : Ces déclencheurs s’exécutent après l’action déclenchante (insertion, mise à jour, suppression) sur la table ;
  • Déclencheurs Before : Ces déclencheurs s’exécutent avant l’action déclenchante. Ils permettent d’intercepter l’action initiale et d’exécuter une logique personnalisée avant de décider de poursuivre ou non l’action initiale.

Exemple de déclencheur After

Nous avons précédemment étudié un exemple d’utilisation d’une transaction pour ajouter des valeurs à la table BankAccounts et à la table UserLogs comme une seule unité logique dans la première section de ce cours.
Désormais, au lieu d’utiliser une transaction, nous pouvons obtenir le même résultat en créant un déclencheur AFTER sur l’opération INSERT dans la table BankAccounts.
Ainsi, il sera uniquement possible d’insérer de nouveaux comptes, et la valeur de journal correspondante sera automatiquement ajoutée par le déclencheur.

-- Create an after-insert trigger for UserLogs
CREATE FUNCTION after_insert_trigger_function()
RETURNS TRIGGER AS $$
BEGIN
    -- Perform some action, like logging the insert
    INSERT INTO UserLogs (account_number, action)
    VALUES (NEW.account_number, CONCAT('New record inserted for ', NEW.account_holder));
    RETURN NEW;
END;
$$ LANGUAGE plpgsql;

-- Attach the trigger to the BankAccounts table
CREATE TRIGGER after_insert_trigger
AFTER INSERT ON BankAccounts
FOR EACH ROW
EXECUTE PROCEDURE after_insert_trigger_function();

Remarque

Dans les déclencheurs PostgreSQL, NEW est une variable d’enregistrement spéciale représentant la nouvelle ligne insérée ou mise à jour dans la table. Elle permet d’accéder aux valeurs des colonnes de la nouvelle ligne à l’intérieur de la fonction du déclencheur.
Si l’on travaille avec des lignes supprimées, il faut utiliser la variable d’enregistrement OLD à la place de NEW.

Exemple de déclencheur Before

Supposons que l’on souhaite empêcher l’ajout de valeurs avec un solde de compte négatif. Nous pouvons créer un déclencheur BEFORE pour cela. Ce déclencheur vérifiera le solde avant l’opération, et s’il est négatif, l’opération ne sera pas effectuée.

-- Create the trigger function
CREATE FUNCTION before_insert_trigger_function() RETURNS TRIGGER AS $$
BEGIN
    -- Check if the account balance is less than 0
    IF (NEW.balance < 0) THEN
        -- If balance is less than 0, do nothing and return
        RAISE NOTICE 'Balance is less than 0. Action not logged.';
    ELSE
        -- If balance is greater than or equal to 0, log the action
        RAISE NOTICE 'Logging insert into UserLogs';
        -- Inserting into the UserLogs table
        INSERT INTO UserLogs (account_number, action)
        VALUES (NEW.account_number, CONCAT('Account created for ', NEW.account_holder));
    END IF;

    -- Indicate that the trigger function has completed successfully
    RETURN NULL;
END;
$$ LANGUAGE plpgsql;

-- Create the trigger
CREATE TRIGGER before_insert_trigger
BEFORE INSERT ON BankAccounts
FOR EACH ROW
EXECUTE PROCEDURE before_insert_trigger_function();

Schéma de création d'un trigger

On observe le schéma typique pour la création de triggers : dans un premier temps, on définit une fonction destinée à exécuter une logique spécifique avant ou après une opération. Ensuite, on associe cette fonction comme trigger à une table et une action désignées.

Veuillez noter que dans l'instruction :

CREATE TRIGGER trigger_name
AFTER INSERT ON table_name
FOR EACH ROW
EXECUTE PROCEDURE proc_name;

nous avons la possibilité d'utiliser UPDATE ou DELETE à la place de l'opération INSERT.
Mais attention : il n'est pas possible de créer des triggers sur SELECT, car l'instruction SELECT ne modifie aucune ligne de la table !

question mark

Quel est le principal objectif de l'utilisation des triggers dans une base de données ?

Select the correct answer

Tout était clair ?

Comment pouvons-nous l'améliorer ?

Merci pour vos commentaires !

Section 3. Chapitre 1
some-alt