Code : SQL
-- On modifie la table Race
ALTER TABLE Race ADD COLUMN date_insertion DATETIME,
-- date d'insertion
ADD COLUMN utilisateur_insertion VARCHAR(20),
-- utilisateur ayant inséré la ligne
ADD COLUMN date_modification DATETIME,
-- date de dernière modification
ADD COLUMN utilisateur_modification VARCHAR(20);
-- utilisateur ayant fait la dernière modification
-- On remplit les colonnes
UPDATE Race
SET date_insertion = NOW() - INTERVAL 1 DAY,
utilisateur_insertion = 'Test',
date_modification = NOW()- INTERVAL 1 DAY,
utilisateur_modification = 'Test';
J'ai mis artificiellement les dates d'insertion et de dernière modification à la veille d'aujourd'hui, et les utilisateurs pour l'insertion
et la modification à "Test", afin d'avoir des données intéressantes lors des tests. Idéalement, ce type d'historisation doit bien sûr
être mis en place dès la création de la table.
Occupons-nous maintenant des triggers. Il en faut sur l'insertion et sur la modification.
Code : SQL
DELIMITER |
CREATE TRIGGER before_insert_race BEFORE INSERT
ON Race FOR EACH ROW
BEGIN
SET NEW.date_insertion = NOW();
SET NEW.utilisateur_insertion = CURRENT_USER();
SET NEW.date_modification = NOW();
SET NEW.utilisateur_modification = CURRENT_USER();
END |
CREATE TRIGGER before_update_race BEFORE UPDATE
ON Race FOR EACH ROW
BEGIN
SET NEW.date_modification = NOW();
SET NEW.utilisateur_modification = CURRENT_USER();
END |
DELIMITER ;
Les triggers sont très simples : ils mettent simplement à jour les colonnes d'historisation nécessaires ; ils doivent donc
nécessairement être BEFORE.
Test :
Code : SQL
INSERT INTO Race (nom, description, espece_id, prix)
VALUES ('Yorkshire terrier', 'Chien de petite taille au pelage long
et soyeux de couleur bleu et feu.', 1, 700.00);
UPDATE Race
SET prix = 630.00
WHERE nom = 'Rottweiller' AND espece_id = 1;
SELECT nom, DATE(date_insertion) AS date_ins, utilisateur_insertion
AS utilisateur_ins, DATE(date_modification) AS date_mod,
Partie 5 : Sécuriser et automatiser ses actions
321/414
www.openclassrooms.com
Précédent

- 321/413

Suivant