Bonjour à tous,
J'ai un problème de durée d'exécution trop longue avec un trigger before delete.
"Fatal error: Maximum execution time of 300 seconds exceeded"
Grosso modo j'ai une table 'news', une table 'usager' et une table 'historique', quand j'efface une news je souhaite que mon trigger efface automatiquement les lignes correspondant à cette news dans ma table 'historique'.
J'ai essayé de modifier mon trigger, avec ou sans jointure, mais le résultat est toujours le même.
Voici les contraintes de mes tables:
La dernière version de mon Trigger est celle-ci :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14 -- Contrainte pour la table 'news' ALTER TABLE `news` ADD CONSTRAINT `FK_news_usager` FOREIGN KEY (`idusager`) REFERENCES `usager` (`idusager`); -- Contraintes pour la table `historique` ALTER TABLE `historique` ADD CONSTRAINT `FK_histo_adresse` FOREIGN KEY (`idadresse`) REFERENCES `adresse` (`idadresse`), ADD CONSTRAINT `FK_histo_annuaire` FOREIGN KEY (`idannuaire`) REFERENCES `annuaire` (`idannuaire`), ADD CONSTRAINT `FK_histo_catref` FOREIGN KEY (`idcatref`) REFERENCES `catref` (`idcatref`), ADD CONSTRAINT `FK_histo_contact` FOREIGN KEY (`idcontact`) REFERENCES `contact` (`idcontact`), ADD CONSTRAINT `FK_histo_ficheref` FOREIGN KEY (`idficheref`) REFERENCES `ficheref` (`idficheref`), ADD CONSTRAINT `FK_histo_missionref` FOREIGN KEY (`idmissionref`) REFERENCES `missionref` (`idmissionref`), ADD CONSTRAINT `FK_histo_news` FOREIGN KEY (`idnews`) REFERENCES `news` (`idnews`), ADD CONSTRAINT `FK_histo_usager` FOREIGN KEY (`idmodificateur`) REFERENCES `usager` (`idusager`);
Si vous voyez ce qui ne va pas, je vous écoute d'une oreille attentive.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13 DROP TRIGGER IF EXISTS deleteNewsHisto; DELIMITER // CREATE TRIGGER deleteNewsHisto BEFORE DELETE ON news FOR EACH ROW BEGIN DELETE FROM historique INNER JOIN news ON news.idnews = historique.idnews WHERE historique.idnews = news.OLD.idnews; END // DELIMITER ;
Question supplémentaire: si je veux ajouter un delete à ce trigger pour qu'il efface en plus les occurences liées à ma news dans une autre table, est-ce possible? (je veux dire sans écrire un autre trigger mais en ajoutant seulement cette instruction à mon trigger existant).
Partager