Créer un déclencheur (trigger) pour enregistrer les insertions
Dans cette étape, vous apprendrez à créer un déclencheur dans MySQL qui enregistre les opérations d'insertion dans une table distincte. Les déclencheurs (triggers) sont des programmes stockés spéciaux qui s'exécutent automatiquement en réponse à certains événements sur une table, tels que INSERT
, UPDATE
ou DELETE
. Cela est utile pour auditer les modifications, appliquer des règles métier ou effectuer d'autres actions basées sur les modifications de données.
Tout d'abord, connectons-nous au serveur MySQL. Ouvrez un terminal et exécutez la commande suivante :
mysql -u root -p
Vous serez invité à saisir le mot de passe de l'utilisateur root. Entrez le mot de passe et appuyez sur Entrée.
Ensuite, créez une base de données nommée mydatabase
si elle n'existe pas déjà :
CREATE DATABASE IF NOT EXISTS mydatabase;
USE mydatabase;
Maintenant, créons une table nommée products
:
CREATE TABLE products (
id INT AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(255) NOT NULL,
price DECIMAL(10, 2) NOT NULL
);
Nous avons également besoin d'une table pour enregistrer les opérations d'insertion. Créons une table nommée product_logs
:
CREATE TABLE product_logs (
log_id INT AUTO_INCREMENT PRIMARY KEY,
product_id INT,
product_name VARCHAR(255),
product_price DECIMAL(10, 2),
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
Maintenant, créons le déclencheur. Le déclencheur sera exécuté après chaque opération d'insertion sur la table products
. Le déclencheur insérera un enregistrement dans la table product_logs
avec les détails du produit inséré.
CREATE TRIGGER products_after_insert
AFTER INSERT ON products
FOR EACH ROW
BEGIN
INSERT INTO product_logs (product_id, product_name, product_price)
VALUES (NEW.id, NEW.name, NEW.price);
END;
Décortiquons la définition du déclencheur :
CREATE TRIGGER products_after_insert
: Cette instruction crée un déclencheur nommé products_after_insert
.
AFTER INSERT ON products
: Cela spécifie que le déclencheur sera exécuté après chaque opération d'insertion sur la table products
.
FOR EACH ROW
: Cela indique que le déclencheur sera exécuté pour chaque ligne qui est insérée dans la table products
.
BEGIN ... END
: Ce bloc contient les instructions SQL qui seront exécutées lorsque le déclencheur est activé.
NEW.id
, NEW.name
, NEW.price
: Ces termes font référence aux valeurs des colonnes id
, name
et price
de la ligne nouvellement insérée.
Maintenant, insérons des données dans la table products
pour tester le déclencheur :
INSERT INTO products (name, price) VALUES ('Laptop', 1200.00);
INSERT INTO products (name, price) VALUES ('Mouse', 25.00);
Enfin, vérifions la table product_logs
pour voir si le déclencheur a inséré les enregistrements de journalisation :
SELECT * FROM product_logs;
Vous devriez voir deux enregistrements dans la table product_logs
, correspondant aux deux opérations d'insertion que nous avons effectuées sur la table products
.
+--------+------------+--------------+---------------+---------------------+
| log_id | product_id | product_name | product_price | created_at |
+--------+------------+--------------+---------------+---------------------+
| 1 | 1 | Laptop | 1200.00 | 2024-10-27 12:00:00 |
| 2 | 2 | Mouse | 25.00 | 2024-10-27 12:00:00 |
+--------+------------+--------------+---------------+---------------------+
2 rows in set (0.00 sec)