Bonjour,
Je viens de remarquer que sous MySql, lorsque l'on utilise le trigger "after insert" sur une table, la ligne n'est insérée dans la table qu'une fois que le traitement du trigger est exécuté, ou en tout cas l’enregistrement n'est visible qu'a ce moment la, je m'explique :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 CREATE TRIGGER `t1` AFTER INSERT ON `test` FOR EACH ROW BEGIN -- ... ici le traitement du trigger s'éxécute -- ... ici la ligne est insérée , et non pas avant END;
Un petit exemple pour tester :
Quel le traitement soit dans le code du trigger directement ou dans une procédure stockée, le comportement semble le même ....
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27 -- création de la table CREATE TABLE IF NOT EXISTS `test` ( `id` int(10) NOT NULL AUTO_INCREMENT, `field1` int(11) DEFAULT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin AUTO_INCREMENT=1 ; -- création du trigger DROP TRIGGER IF EXISTS `t1` ; CREATE TRIGGER `t1` AFTER INSERT ON `test` FOR EACH ROW BEGIN -- traitement quelconque qui prends tu temps SET @CPT=1; WHILE @CPT < 5000000 DO SET @CPT=@CPT+1; END WHILE; END; -- insertion d'une données, pour déclencher le trigger INSERT INTO `test` (field1`) VALUES (1); -- après l'insertion, si on effectue cette requête de select plusieurs fois , on vois que la ligne n'est insérée quaprès un certain délais, ce délaiscorrespondant au traitement inclus dans le trigger select * from `test`;
Avez vous déjà remarqué ce comportement ? Existe il une astuce pour que la ligne soit insérée avant que le traitement du trigger s'exécute ?
Partager