Je veux avoir une table avec deux colonnes TIMESTAMP
. Une colonne pour suivre la date de création de l'enregistrement et une autre pour suivre la date de sa modification. Je veux que ces valeurs soient gérées par la base de données. Je ne veux pas que ma couche d'application y réfléchisse.
Je sais que si vous avez une colonne TIMESTAMP
avec un DEFAULT CURRENT_TIMESTAMP
ou un ON UPDATE CURRENT_TIMESTAMP
vous ne pouvez pas avoir une autre colonne TIMESTAMP
. Vous pouvez utiliser DATETIME
mais il n'y a aucun moyen par défaut, à ma connaissance, en dehors d'un déclencheur.
J'ai trouvé que vous pouvez avoir plusieurs colonnes TIMESTAMP
en les laissant sans DEFAULT
ou ON UPDATE
et en insérant NULL
lors de la création de l'enregistrement, ce qui fait que chacun a l'horodatage actuel. À partir de ce moment, la première colonne sera automatiquement mise à jour.
Cela fonctionne à merveille mais cela me laisse avec une drôle de sensation. Comme cela peut être un bug et il peut être corrigé à tout moment. Si c'est ainsi que cela est censé fonctionner, qu'il en soit ainsi. Je continuerai joyeusement mon chemin. Quelqu'un peut-il me dire si c'est la meilleure façon de le faire ou dois-je utiliser des déclencheurs?
Il est documenté dans les documents MySQL:
De plus, vous pouvez initialiser ou mettre à jour n'importe quelle colonne TIMESTAMP à la date et à l'heure actuelles en lui affectant une valeur NULL , sauf si elle a été définie avec NULL attribut pour autoriser les valeurs NULL.
http://dev.mysql.com/doc/refman/5.0/en/timestamp-initialization.html
Les versions de MySQL antérieures à 5.6.1 ne laisseraient pas deux colonnes TIMESTAMP
dans la même table, sauf si vous l'avez noté à juste titre sans défaut et en autorisant null.
MySQL 5.6. + Autorise deux colonnes TIMESTAMP
ou plus dans une table.
Plus ici: http://shankargopal.blogspot.in/2013/03/mysql-566-timestamp-columns-and-default.html
MySQL autorise plusieurs colonnes TIMESTAMP dans la même table, vérifiez cet exemple:
CREATE TABLE t1 ( ts1 TIMESTAMP DEFAULT 0, ts2 TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP); CREATE TABLE t2 ( ts1 TIMESTAMP NULL, ts2 TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP); CREATE TABLE t3 ( ts1 TIMESTAMP NULL DEFAULT 0, ts2 TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP);
Notez que la colonne ts1 TIMESTAMP est DEFAULT avec VALUE 0 et la colonne ts2 TIMESTAMP est DEFAULT avec la valeur CURRENT_TIMESTAMP. Plus d'informations ici http://dev.mysql.com/doc/refman/5.0/en/timestamp-initialization.html