Bonjour,

Je suis actuellement confronté à un phénomène inattendu en utilisant les triggers avec une table de test sous MySQL 5.0.

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
 
CREATE TABLE test_trigger (
 id int unsigned not null auto_increment,
 code varchar(30) not null,
 date_creation timestamp not null,
 date_maj timestamp not null,
 PRIMARY KEY(id),
 KEY(code)
) ;
Je crée deux triggers très simples permettant les mise à jour des champs date sur l'insertion et la mise à jour de l'enregistrement.

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
 
DELIMITER //
CREATE TRIGGER d_bi_test_trigger BEFORE INSERT ON test_trigger FOR EACH ROW
BEGIN
  SET new.date_creation = Now() ;
  SET new.date_maj = Now() ;
END //
DELIMITER ;
 
DELIMITER //
CREATE TRIGGER d_bu_test_trigger BEFORE UPDATE ON test_trigger FOR EACH ROW
BEGIN
  SET new.date_maj = Now() ;
END //
DELIMITER ;
Ensuite, j'exécute une insertion.

Code : Sélectionner tout - Visualiser dans une fenêtre à part
INSERT INTO test_trigger(code) VALUES ('Objet1') ;
Le résultat est conforme à ce qui est attendu :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
 
+----+--------+---------------------+---------------------+
| id | code   | date_creation       | date_maj            |
+----+--------+---------------------+---------------------+
|  1 | Objet1 | 2007-08-13 11:34:54 | 2007-08-13 11:34:54 |
+----+--------+---------------------+---------------------+
Ensuite, je fais une mise à jour de cet enregistrement.

Code : Sélectionner tout - Visualiser dans une fenêtre à part
UPDATE test_trigger SET code='Objet2' WHERE code='Objet1' ;
Et le résultat est le suivant:

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
 
+----+--------+---------------------+---------------------+
| id | code   | date_creation       | date_maj            |
+----+--------+---------------------+---------------------+
|  1 | Objet2 | 2007-08-13 11:35:25 | 2007-08-13 11:35:25 |
+----+--------+---------------------+---------------------+
En résumé mon déclencheur sur l'update semble avoir effectué les mêmes actions que mon déclencher sur l'insert, c'est-à-dire la maj de la "date de maj" et de la "date_creation"

Etonnant, non ?

Merci d'avance pour vos avis éclairés...