utilisateur_modification AS utilisateur_mod
FROM Race
WHERE espece_id = 1;
nom
date_ins utilisateur_ins date_mod utilisateur_mod
Berger allemand
2012-05-02 Test
2012-05-02 Test
Berger blanc suisse 2012-05-02 Test
2012-05-02 Test
Rottweiller
2012-05-02 Test
2012-05-03 sdz@localhost
Yorkshire terrier
2012-05-03 sdz@localhost 2012-05-03 sdz@localhost
Historisation complète
Nous allons mettre en place un système d'historisation complet pour la table Animal. Celle-ci ne change pas et contiendra la
dernière version des données. Par contre, on va ajouter une table Animal_histo, qui contiendra les versions antérieures (quand il
y en a) des données d'Animal.
Code : SQL
CREATE TABLE Animal_histo (
id SMALLINT(6) UNSIGNED NOT NULL,
-- Colonnes
historisées
sexe CHAR(1),
date_naissance DATETIME NOT NULL,
nom VARCHAR(30),
commentaires TEXT,
espece_id SMALLINT(6) UNSIGNED NOT NULL,
race_id SMALLINT(6) UNSIGNED DEFAULT NULL,
mere_id SMALLINT(6) UNSIGNED DEFAULT NULL,
pere_id SMALLINT(6) UNSIGNED DEFAULT NULL,
disponible BOOLEAN DEFAULT TRUE,
date_histo DATETIME NOT NULL,
-- Colonnes
techniques
utilisateur_histo VARCHAR(20) NOT NULL,
evenement_histo CHAR(6) NOT NULL,
PRIMARY KEY (id, date_histo)
) ENGINE=InnoDB;
Les colonnes date_histo et utilisateur_histo contiendront bien sûr la date à laquelle la ligne a été historisée, et l'utilisateur qui a
provoqué cette historisation. Quant à la colonne evenement_histo, elle contiendra l'événement qui a déclenché le trigger (soit
"DELETE", soit "UPDATE"). La clé primaire de cette table est le couple (id , date_histo).
Voici les triggers nécessaires. Cette fois, ils pourraient être soit BEFORE, soit AFTER. Cependant, aucun traitement ne concerne
les nouvelles valeurs de la ligne modifiée (ni, a fortiori, de la ligne supprimée). Par conséquent, autant utiliser AFTER, cela évitera
d'exécuter les instructions du trigger en cas d'erreur lors de la requête déclenchant celui-ci.
Code : SQL
DELIMITER |
CREATE TRIGGER after_update_animal AFTER UPDATE
ON Animal FOR EACH ROW
BEGIN
INSERT INTO Animal_histo (
id,
sexe,
date_naissance,
nom,
Partie 5 : Sécuriser et automatiser ses actions
322/414
www.openclassrooms.com
Précédent

- 322/413

Suivant