web-dev-qa-db-fra.com

Une table Mysql avec plusieurs colonnes TIMESTAMP

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?

60
Josh Johnson

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

38
Marc B

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

35
Santosh Achari

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