Trigger Before Insert et Before Update
Bonjour,
Je suis actuellement confronté à un phénomène inattendu en utilisant les triggers avec une table de test sous MySQL 5.0.
Code:
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:
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:
INSERT INTO test_trigger(code) VALUES ('Objet1') ;
Le résultat est conforme à ce qui est attendu :
Code:
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:
UPDATE test_trigger SET code='Objet2' WHERE code='Objet1' ;
Et le résultat est le suivant:
Code:
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...