Créer des triggers dans MySQL
Créer des triggers dans MySQL
-
Objectifs
- Être capable de créer des triggers dans MySQL MySQL
- Apprendre à utiliser l’instruction MySQL CREATE TRIGGER pour créer un trigger dans la base de données .
-
Syntaxe
CREATE TRIGGER
- L’instruction
CREATE TRIGGER
crée un nouveau déclencheur. Voici la syntaxe de base de cette instruction : -
Étapes de création
- Spécifier le nom du déclencheur qui sera crée après les mots – clés
CREATE TRIGGER
.
Notez que le nom du déclencheur doit être unique dans une base de données.
- Spécifier le temps d’action du déclencheur qui peut être soit
BEFORE
ouAFTER
qui indique que le déclencheur est appelé avant ou après la modification de chaque ligne. - Écrire l’opération qui active le déclencheur, ce qui peut être
INSERT
,UPDATE
ouDELETE
. - Spécifier le nom de la table à laquelle le déclencheur appartient après le mot-clé
ON
. - Appeler l’instruction à exécuter lorsque le déclencheur s’active. Si vous souhaitez exécuter plusieurs instructions, vous utilisez l’instruction composée
BEGIN END
. -
Les mots clés
OLD
etNEW
- Il est possible d’utiliser les mots clés OLD et NEW, qui réfèrent respectivement à la valeur avant le trigger et à la nouvelle valeur.
- Le trigger peut accéder aux valeurs de la colonne concernée par la déclaration. Les modificateurs OLD et NEW sont utilisés pour distinguer la valeur des colonnes AVANT et APRÈS le déclenchement de l’opération.
- Par exemple, si vous mettez à jour la description de la colonne dans le trigger_body, vous pouvez accéder à la valeur de la description avant la mise à jour (OLD.description) et à la nouvelle valeur (NEW.description).
- Le tableau suivant illustre la disponibilité de ces mots-clés :
-
Les meilleures pratiques
- La meilleure pratique consiste à nommer le déclencheur avec les informations suivantes :
- il existe une convention quant à la manière de nommer ses triggers, que je vous encourage à suivre : nom_trigger = moment_evenement_table. Donc le trigger BEFORE UPDATE ON Animal aura pour nom :
before_update_animal
. -
Comment ajouter des triggers à une base de données dans phpMyAdmin ?
- Avant de pouvoir accéder à la fonctionnalité PHPMyAdmin, vous devez démarrer votre serveur web installé. Pour ce faire, veuillez consulter notre tutoriel sur Comment installer phpMyAdmin sur Windows.
- Une fois connecté, accéder à la section « Base de données » et cliquer sur l’icône « phpMyAdmin ».
- Un clic sur le résultat vous redirige vers la fonctionnalité « PHPMyAdmin ». Dans la barre latérale gauche, vous verrez une liste de toutes vos bases de données.
- Veuillez sélectionner la base de données pour laquelle vous souhaitez créer le déclencheur MySQL.
- Une fois que vous avez sélectionné la base de données, phpMyAdmin listera toutes ses tables au milieu de l’écran.
- Dans la barre du haut, veuillez cliquer sur l’onglet « Plus » puis sur « Déclencheurs ». Cette action vous amène directement à la page, ce qui vous permet d’ajouter des déclencheurs de base de données.
- En haut, vous pouvez voir la section « Déclencheurs » où phpMyadmin affichera tous les déclencheurs de base de données existants. S’il n’y en a pas, comme dans notre cas, il sera vide. Veuillez cliquer sur le bouton « Ajouter un déclencheur » situé sous la section « Nouveau » pour ajouter un déclencheur MySQL.
-
configurer votre nouveau déclencheur
- Cette action affichera une fenêtre contextuelle, qui vous permettra de configurer votre nouveau déclencheur de base de données.
- Ci-dessous, nous allons couvrir la majorité des options fournies dans la fenêtre contextuelle.
- Nom du déclencheur : Dans ce champ de texte, veuillez saisir le nom de votre déclencheur. Une pratique courante consiste à utiliser un nom correspondant à la fonctionnalité du déclencheur de base de données.
- Table : Veuillez utiliser le menu déroulant et sélectionner la table que phpMyAdmin ajoutera le déclencheur MySQL.
- Heure : Veuillez utiliser le menu déroulant pour sélectionner quand vous souhaitez que ce déclencheur soit activé – AVANT ou APRÈS .
- Événement: Veuillez utiliser le menu déroulant pour définir l’événement qui active le déclencheur de la base de données.
- Définition : Dans cette zone de contenu, veuillez saisir le code SQL que vous souhaitez que le serveur MySQL exécute lorsque le déclencheur de base de données est activé.
- Definer : Veuillez utiliser ce champ de texte pour définir le définisseur du déclencheur MySQL.
- Après avoir configuré votre déclencheur, veuillez appuyer sur le bouton « Exécuter » pour le créer.
-
Application
- Créer un déclencheur dans MySQL pour enregistrer les modifications de la table « comptes » de la base de donnée « banque » suivante:
- Tout d’abord, créer une nouvelle table nommée « comptes_modifies » conserver les modifications apportées à la table « comptes«
- Ensuite, créer un déclencheur BEFORE UPDATE qui est appelé avant qu’une modification ne soit apportée à la table « comptes« .
- Vérification du colonne sexe du table clients
- Dans notre table clients se trouve la colonne sexe. Cette colonne accepte tout caractère, ou NULL. Or, seuls les caractères « M » et « F » ont du sens. Nous allons donc créer deux triggers, un pour l’insertion, l’autre pour la modification, qui vont empêcher qu’on donne un autre caractère que ”M” ou ”F” pour sexe.
- Ces deux triggers devront se déclencher avant l’insertion et la modification. On aura donc :
- Tester le Trigger
- Le sexe est bien NULL, le trigger a fonctionné.
- Pour le second trigger, déclenché par l’insertion de lignes, on va implémenter le second comportement : on va déclencher une erreur, ce qui empêchera l’insertion, et affichera l’erreur.
- Maintenant créer un trigger qui calcule le numéro du client suivant la forme proposée « C401 » comme partie obligatoire et quatre chiffres incrémenté de 1 pour chaque ajout dans la table client sachant que l’utilisateur ne peut pas supprimer un client
CREATE TRIGGER trigger_name {BEFORE | AFTER} {INSERT | UPDATE| DELETE } ON table_name FOR EACH ROW trigger_body;
Type d’opération (trigger_event) | OLD | NEW |
---|---|---|
INSERT | Non | Oui |
UPDATE | Oui | Oui |
DELETE | Oui | Non |
<trigger time>_<table name>_<trigger-event>
DROP TABLE IF EXISTS `comptes_modifies`; CREATE TABLE IF NOT EXISTS `comptes_modifies` ( id INT AUTO_INCREMENT PRIMARY KEY, Num_Compte varchar(255) COLLATE utf8_unicode_ci NOT NULL, Solde_Compte double(12,3) NOT NULL, created_at timestamp NULL DEFAULT NULL, updated_at timestamp NULL DEFAULT NULL, Num_Client varchar(255) COLLATE utf8_unicode_ci NOT NULL, Num_Agence varchar(255) COLLATE utf8_unicode_ci NOT NULL, action VARCHAR(50) DEFAULT NULL ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;