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

book
Déclencheurs

Déclencheurs dans les bases de données sont des types spéciaux de procédures stockées qui sont automatiquement exécutées 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 et des modifications des objets de schéma de base de données comme les tables ou les vues.

Remarque

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

Déclencheurs DML

Un déclencheur DML, également connu sous le nom de 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 après : Ces déclencheurs se déclenchent après l'exécution de l'action de déclenchement (insertion, mise à jour, suppression) sur la table ;
  • Déclencheurs avant : Ces déclencheurs se déclenchent avant l'action de déclenchement. Ils vous permettent d'intercepter l'action originale et d'exécuter une logique personnalisée avant de décider de poursuivre ou non l'action originale.

Exemple de déclencheur après

Nous avons précédemment exploré un exemple d'utilisation d'une transaction pour ajouter des valeurs à la table BankAccounts et à la table UserLogs en tant qu'unité logique unique dans la première section de ce cours.
Maintenant, au lieu d'utiliser une transaction, nous pouvons réaliser cela en créant un déclencheur AFTER sur l'opération INSERT dans la table BankAccounts.
En conséquence, nous ne pourrons insérer que de nouveaux comptes, et la valeur de journal correspondante sera automatiquement ajoutée par le déclencheur.

sql
-- 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 vous permet d'accéder aux valeurs des colonnes dans la nouvelle ligne au sein de la fonction de déclenchement.
Si nous travaillons avec des lignes supprimées, nous devons utiliser la variable d'enregistrement OLD au lieu de NEW.

Exemple de déclencheur avant

Supposons que nous voulons empêcher l'ajout de valeurs avec un solde de compte négatif. Nous pouvons créer un déclencheur BEFORE pour y parvenir. 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.

sql
-- 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();

Modèle de création de déclencheur

Nous pouvons observer le modèle typique pour créer des déclencheurs : initialement, nous définissons une fonction pour exécuter une logique spécifique avant ou après une opération. Ensuite, nous associons cette fonction comme un déclencheur à une table et une action désignées.

Veuillez noter que dans l'instruction :

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

nous avons la flexibilité d'utiliser UPDATE ou DELETE, à la place de l'opération INSERT.
Mais faites attention que nous ne pouvons pas créer de déclencheurs SELECT car l'instruction SELECT ne modifie aucune ligne dans la table !

question mark

Quel est le principal objectif de l'utilisation des déclencheurs 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
We use cookies to make your experience better!
some-alt