Les déclencheurs (triggers)

Les déclencheurs ou triggers sont des objets de base de données qui permettent d'automatiser l'exécution d'actions spécifiques lorsqu'un événement prédéfini se produit dans une table (comme une insertion, une mise à jour ou une suppression). Ils sont utiles pour assurer l'intégrité des données ou déclencher des processus automatiques lorsqu'une certaine condition est remplie.

7.3.1 Types de déclencheurs

Il existe deux types principaux de déclencheurs dans MySQL, en fonction de l'événement qui les déclenche :

  1. BEFORE : Le déclencheur s'exécute avant l'événement (avant l'insertion, la mise à jour ou la suppression).

  2. AFTER : Le déclencheur s'exécute après l'événement.

Ces déclencheurs peuvent être définis pour les événements suivants :

  • INSERT : Lorsqu'une nouvelle ligne est insérée dans la table.

  • UPDATE : Lorsqu'une ligne existante est mise à jour.

  • DELETE : Lorsqu'une ligne est supprimée de la table.

7.3.2 Syntaxe de base pour créer un déclencheur

CREATE TRIGGER nom_declencheur 
{BEFORE | AFTER} {INSERT | UPDATE | DELETE}
ON table
FOR EACH ROW
BEGIN
    -- Actions à exécuter
END;

Exemple 1 : Déclencheur BEFORE INSERT

Ce déclencheur vérifie que le montant d'une commande est supérieur à 0 avant de l'insérer dans la table commandes.

CREATE TRIGGER checkMontantAvantInsert
BEFORE INSERT ON commandes
FOR EACH ROW
BEGIN
    IF NEW.montant_total <= 0 THEN
        SIGNAL SQLSTATE '45000'
        SET MESSAGE_TEXT = 'Le montant doit être supérieur à 0.';
    END IF;
END;

Exemple 2 : Déclencheur AFTER UPDATE

Ce déclencheur est exécuté après qu'une ligne a été mise à jour dans la table stocks, et il enregistre l'ancienne valeur dans une table d'historique.

CREATE TRIGGER logStockUpdate
AFTER UPDATE ON stocks
FOR EACH ROW
BEGIN
    INSERT INTO historique_stocks (id_produit, ancien_stock, nouveau_stock, date_modification)
    VALUES (OLD.id_produit, OLD.quantite, NEW.quantite, NOW());
END;

Exemple 3 : Déclencheur BEFORE DELETE

Ce déclencheur stocke les informations d'une ligne dans une table d'archives avant sa suppression.

CREATE TRIGGER archiveBeforeDelete
BEFORE DELETE ON clients
FOR EACH ROW
BEGIN
    INSERT INTO archive_clients (id_client, nom, email, date_inscription)
    VALUES (OLD.id_client, OLD.nom, OLD.email, OLD.date_inscription);
END;

7.3.3 Utilisation des variables OLD et NEW

  • NEW : Représente la nouvelle valeur de la ligne en cours d'insertion ou de mise à jour.

  • OLD : Représente l'ancienne valeur de la ligne en cours de mise à jour ou de suppression.

Last updated