web-dev-qa-db-fra.com

colonne d'horodatage mysql

Est-il possible de définir une colonne timestamp dans une table MySQL qui sera automatiquement mise à jour chaque fois qu'un champ de la même ligne est modifié? Idéalement, cette colonne devrait initialement être définie sur l'heure à laquelle une ligne a été insérée.

Cordialement, Don

25
Dónal

Telle est la fonctionnalité par défaut du type de colonnetimestamp. Toutefois, notez que le format de ce type est aaaammjjhhmmss (tous les chiffres, pas de virgule ou autre séparation).

EDIT: Le commentaire ci-dessus sur le format n'est vrai que pour les versions de MySQL <4.1 ... Les versions ultérieures le formatent comme un DateTime

19
Adam Bellaire

Vous pouvez utiliser la colonne timestamp comme les autres affiches mentionnées. Voici le code SQL que vous pouvez utiliser pour ajouter la colonne dans:

ALTER TABLE `table1` ADD `lastUpdated` TIMESTAMP ON UPDATE CURRENT_TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ;

Cela ajoute une colonne appelée "lastUpdated" avec une valeur par défaut de la date/heure actuelle. Lorsque cet enregistrement est mis à jour (disons 5 minutes plus tard), l'horodatage se met automatiquement à l'heure actuelle.

36
quickcel

C'est ce que j'ai observé (MySQL 5.7.11) - 

La première colonne TIMESTAMP de la table obtient la valeur par défaut de l'horodatage actuel. Ainsi, si vous effectuez une INSERT ou une UPDATE sans fournir de valeur, la colonne obtiendra l'horodatage actuel. 

Toutes les colonnes TIMESTAMP suivantes doivent avoir une valeur par défaut explicitement définie. Si vous avez deux colonnes TIMESTAMP et si vous ne spécifiez pas de valeur par défaut pour la deuxième colonne, vous obtiendrez cette erreur en essayant de créer la table - 

ERREUR 1067 (42000): valeur par défaut non valide pour 'COLUMN_NAME'

1
Do Will

Un horodatage MySQL est défini avec l'heure de création ou de mise à jour uniquement si leur valeur par défaut est définie. ALTER TABLE some_table ADD when TIMESTAMP DEFAULT CURRENT_TIMESTAMP.
Sinon, il fonctionne comme un champ DateTime, mais il est relatif par rapport au 1970/01/01 UTC. Il s’agit donc d’un point de temps absolu ne dépendant pas d’un fuseau horaire spécifique comme le est DateTime.

0
Petruza