Bonjour!
J'aimerais qu'un trigger se déclenche sur une table, lors de la suppression de lignes... Ce trigger va supprimer des lignes dans une autre table!
C'est l'implémentation classique d'une clause ON DELETE CASCADE dans MySQL, quand on a besoin de déclencher des triggers! Puisque la clause ON DELETE ne déclenche toujours pas les triggers...
Prenons un exemple :
J'ai un trigger before delete sur User qui va supprimer ses Trucs.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9 CREATE TABLE User ( id INT UNSIGNED PRIMARY KEY AUTO_INCREMENT ); CREATE TABLE Truc ( id INT UNSIGNED PRIMARY KEY AUTO_INCREMENT, user INT UNSIGNED, CONSTRAINT fkUser FOREIGN KEY (user) REFERENCES User(id) ON UPDATE CASCADE ON DELETE CASCADE );
Dans le cas où, finalement, le User ne pourrait être supprimé, il me faut effectuer la suppression des Trucs dans une transaction.
J'ai donc un START TRANSACTION avant la suppression des Trucs du User...
J'imagine donc qu'il me faut créer un trigger after delete pour y placer un COMMIT!
Ma question est la suivante : où dois-je placer le ROLLBACK, dans le cas où ça foire?
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10 CREATE TRIGGER User_BeforeDelete BEFORE DELETE ON User FOR EACH ROW BEGIN START TRANSACTION; DELETE FROM Truc WHERE id IN (SELECT id FROM Truc WHERE user = OLD.id); END CREATE TRIGGER User_AfterDelete AFTER DELETE ON User FOR EACH ROW BEGIN COMMIT; END
Merci à vous!
Partager