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 :

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 qu’après un certain délais, ce délaiscorrespondant au traitement inclus dans le trigger
select * from `test`;
Quel le traitement soit dans le code du trigger directement ou dans une procédure stockée, le comportement semble le même ....

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 ?