Mysql
 sql >> Base de données >  >> RDS >> Mysql

Quand un horodatage (auto) est-il mis à jour ?

Donnez la commande SHOW CREATE TABLE whatever

Ensuite, regardez la définition de table .

Il a probablement une ligne comme celle-ci

logtime TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,

dedans. DEFAULT CURRENT_TIMESTAMP signifie que tout INSERT sans paramètre d'horodatage explicite utilise l'heure actuelle. De même, ON UPDATE CURRENT_TIMESTAMP signifie que toute mise à jour sans horodatage explicite entraîne une mise à jour de la valeur d'horodatage actuelle.

Vous pouvez contrôler ce comportement par défaut lors de la création de votre tableau.

Ou, si la colonne d'horodatage n'a pas été créée correctement au départ, vous pouvez la modifier.

ALTER TABLE whatevertable
     CHANGE whatevercolumn 
            whatevercolumn TIMESTAMP NOT NULL
                           DEFAULT CURRENT_TIMESTAMP 
                           ON UPDATE CURRENT_TIMESTAMP;

Ainsi, les opérations INSERT et UPDATE sur la table mettront automatiquement à jour votre colonne d'horodatage. Si vous souhaitez mettre à jour whatevertable sans changer l'horodatage, c'est-à-dire

alors vous devez publier ce type de mise à jour.

UPDATE whatevertable
   SET something = 'newvalue',
       whatevercolumn = whatevercolumn
 WHERE someindex = 'indexvalue'

Cela fonctionne avec TIMESTAMP et DATETIME Colonnes. (Avant la version 5.6.5 de MySQL, cela ne fonctionnait qu'avec TIMESTAMP s) Lorsque vous utilisez TIMESTAMP s, les fuseaux horaires sont pris en compte :sur une machine serveur correctement configurée, ces valeurs sont toujours stockées en UTC et traduites en heure locale lors de la récupération.