MySQL - CREATE TRIGGER : Guide pour débutants

Salut à toi, aspirant passionné de bases de données ! Aujourd'hui, nous allons plonger dans le monde fascinant des déclencheurs MySQL. Ne t'inquiète pas si tu es nouveau dans la programmation ; je serai ton guide amical tout au long de ce voyage. À la fin de ce tutoriel, tu seras capable de créer des déclencheurs comme un pro !

MySQL - Create Trigger

Qu'est-ce qu'un déclencheur ?

Avant de se lancer dans la création de déclencheurs, comprens ce qu'ils sont. Imagine que tu as un chien fidèle qui aboie toujours quand quelqu'un sonne à la porte. Dans le monde des bases de données, un déclencheur est comme ce chien - une réponse automatique à un événement spécifique dans ta base de données.

Définition

Un déclencheur est un objet de base de données nommé associé à une table et activé automatiquement lorsque se produit un événement spécifique pour cette table.

Créer des déclencheurs dans MySQL

Maintenant que nous savons ce qu'est un déclencheur, apprenons comment les créer dans MySQL. C'est comme apprendre un nouveau sortilège, mais au lieu de secouer une baguette, nous taperons des commandes !

Syntaxe de base

Voici la structure de base d'une instruction CREATE TRIGGER :

CREATE TRIGGER trigger_name
{BEFORE | AFTER} {INSERT | UPDATE | DELETE}
ON table_name
FOR EACH ROW
trigger_body;

Décomposons cela :

  1. trigger_name : C'est ce que tu appelleras ton déclencheur. Choisis un nom qui décrit ce qu'il fait.
  2. {BEFORE | AFTER} : Cela détermine quand le déclencheur s'active - avant ou après l'événement spécifié.
  3. {INSERT | UPDATE | DELETE} : C'est l'événement qui active le déclencheur.
  4. table_name : La table associée au déclencheur.
  5. FOR EACH ROW : Cela signifie que le déclencheur s'active pour chaque rangée affectée par l'événement.
  6. trigger_body : Les instructions SQL à exécuter lorsque le déclencheur s'active.

Exemple 1 : Déclencheur BEFORE INSERT

Créons un déclencheur qui assure que tous les noms des employés sont en majuscules avant qu'ils ne soient insérés dans la table.

CREATE TRIGGER capitalize_name
BEFORE INSERT ON employees
FOR EACH ROW
SET NEW.name = UPPER(NEW.name);

Dans cet exemple :

  • Le déclencheur est nommé capitalize_name.
  • Il s'active BEFORE une opération INSERT sur la table employees.
  • Pour chaque nouvelle rangée, il met en majuscules la colonne name en utilisant la fonction UPPER().
  • NEW se réfère à la nouvelle rangée être insérée.

Exemple 2 : Déclencheur AFTER UPDATE

Maintenant, créons un déclencheur qui enregistre les changements de salaire dans une table distincte.

CREATE TRIGGER log_salary_changes
AFTER UPDATE ON employees
FOR EACH ROW
BEGIN
IF OLD.salary <> NEW.salary THEN
INSERT INTO salary_log (employee_id, old_salary, new_salary, change_date)
VALUES (NEW.id, OLD.salary, NEW.salary, NOW());
END IF;
END;

Voici ce qui se passe :

  • Le déclencheur est nommé log_salary_changes.
  • Il s'active AFTER une opération UPDATE sur la table employees.
  • Il vérifie si le salaire a changé (OLD.salary <> NEW.salary).
  • Si il y a un changement, il insère un enregistrement dans la table salary_log.
  • OLD se réfère à la rangée avant la mise à jour, et NEW à la rangée après la mise à jour.

Créer des déclencheurs à l'aide d'un programme client

Bien que nous puissions créer des déclencheurs directement dans MySQL, il est parfois plus pratique d'utiliser un programme client. Voyons comment faire cela en utilisant le client en ligne de commande MySQL.

Étape 1 : Se connecter à MySQL

Premièrement, ouvre ton terminal ou invite de commande et connecte-toi à MySQL :

mysql -u username -p

Remplace username par ton nom d'utilisateur MySQL. Tu seras invité à entrer ton mot de passe.

Étape 2 : Sélectionner la base de données

Une fois connecté, sélectionne la base de données avec laquelle tu veux travailler :

USE your_database_name;

Étape 3 : Créer le déclencheur

Maintenant, tu peux créer ton déclencheur. Utilisons notre exemple de journal des salaires :

DELIMITER //

CREATE TRIGGER log_salary_changes
AFTER UPDATE ON employees
FOR EACH ROW
BEGIN
IF OLD.salary <> NEW.salary THEN
INSERT INTO salary_log (employee_id, old_salary, new_salary, change_date)
VALUES (NEW.id, OLD.salary, NEW.salary, NOW());
END IF;
END//

DELIMITER ;

Note l'utilisation de DELIMITER // et DELIMITER ;. Cela est dû au fait que notre corps de déclencheur contient des points-virgules, donc nous devons temporairement changer le délimiteur.

Étape 4 : Vérifier le déclencheur

Pour t'assurer que ton déclencheur a été créé avec succès, tu peux utiliser :

SHOW TRIGGERS;

Cela affichera tous les déclencheurs de la base de données actuelle.

Méthodes de déclencheurs

Voici un tableau des méthodes de déclencheurs les plus courantes dans MySQL :

Méthode Description
BEFORE INSERT S'active avant qu'une nouvelle rangée soit insérée
AFTER INSERT S'active après qu'une nouvelle rangée soit insérée
BEFORE UPDATE S'active avant qu'une rangée existante soit mise à jour
AFTER UPDATE S'active après qu'une rangée existante soit mise à jour
BEFORE DELETE S'active avant qu'une rangée existante soit supprimée
AFTER DELETE S'active après qu'une rangée existante soit supprimée

Souviens-toi, chacun de ces peut être un outil puissant lorsqu'il est utilisé correctement. C'est comme avoir un couteau suisse pour ta base de données !

Conclusion

Félicitations ! Tu viens de faire tes premiers pas dans le monde des déclencheurs MySQL. Nous avons couvert ce qu'est un déclencheur, comment les créer, et même comment les utiliser avec un programme client. Souviens-toi, comme avec tout outil puissant, les déclencheurs devraient être utilisés avec sagesse. Ils peuvent grandement améliorer tes opérations de base de données, mais les utiliser en excès peut entraîner de la complexité et des problèmes de performance.

While continuant ton voyage avec MySQL, continue de pratiquer et d'expérimenter avec les déclencheurs. Bientôt, tu seras capable de créer des magies de base de données qui ferait même jalouser Merlin ! Bon codage, et puissent tes requêtes toujours retourner les résultats que tu attendras !

Credits: Image by storyset