Dé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’enregistrementOLD
à la place deNEW
.
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 !
Merci pour vos commentaires !
Demandez à l'IA
Demandez à l'IA
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
Dé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’enregistrementOLD
à la place deNEW
.
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 !
Merci pour vos commentaires !