recréer) quelques triggers pour reproduire le comportement que l'on avait défini.
À ceci près que la restriction sur la modification des données d'une table utilisée par l'événement déclencheur fait qu'on ne
pourra pas reproduire certains comportements. On ne pourra pas mettre à NULL les colonnes pere_id et mere_id de la table
Animal en cas de suppression de l'animal de référence.
Voici les commandes :
Code : SQL
-- On supprime les clés
ALTER TABLE Race DROP FOREIGN KEY fk_race_espece_id;
ALTER TABLE Animal DROP FOREIGN KEY fk_race_id,
DROP FOREIGN KEY fk_mere_id,
DROP FOREIGN KEY fk_pere_id;
-- On les recrée sans option
ALTER TABLE Race ADD CONSTRAINT fk_race_espece_id FOREIGN KEY
(espece_id) REFERENCES Espece (id);
ALTER TABLE Animal ADD CONSTRAINT fk_race_id FOREIGN KEY (race_id)
REFERENCES Race (id),
ADD CONSTRAINT fk_mere_id FOREIGN KEY (mere_id)
REFERENCES Animal (id),
ADD CONSTRAINT fk_pere_id FOREIGN KEY (pere_id)
REFERENCES Animal (id);
-- Trigger sur Race
DELIMITER |
CREATE TRIGGER before_delete_race BEFORE DELETE
ON Race FOR EACH ROW
BEGIN
UPDATE Animal
SET race_id = NULL
WHERE race_id = OLD.id;
END|
-- Trigger sur Espece
CREATE TRIGGER before_delete_espece BEFORE DELETE
ON Espece FOR EACH ROW
BEGIN
DELETE FROM Race
WHERE espece_id = OLD.id;
END |
DELIMITER ;
En résumé
Un trigger est un objet stocké dans la base de données, à la manière d'une table ou d'une procédure stockée. La seule
différence est qu'un trigger est lié à une table, donc en cas de suppression d'une table, les triggers liés à celle-ci sont
supprimés également
Un trigger définit une ou plusieurs instructions, dont l'exécution est déclenchée par une insertion, une modification ou
une suppression de données dans la table à laquelle le trigger est lié.
Les instructions du trigger peuvent être exécutées avant la requête ayant déclenché celui-ci, ou après. Ce comportement
est à définir à la création du trigger.
Une table ne peut posséder qu'un seul trigger par combinaison événement/moment (BEFORE UPDATE, AFTER
DELETE,…)
Les triggers sous MySQL sont soumis à d'importantes (et potentiellement très gênantes) restrictions.
Sécuriser une base de données et automatiser les traitements ne se limite bien sûr pas à ce que nous venons de voir. Les deux
prochaines parties vous donneront de nouveaux outils pour avoir une base de données bien construite, sûre et efficace.
Cependant, tout ne pourra pas être abordé dans ce cours, donc n'hésitez pas à poursuivre votre apprentissage.
Partie 5 : Sécuriser et automatiser ses actions
326/414
www.openclassrooms.com
Précédent

- 326/413

Suivant