web-dev-qa-db-fra.com

MySQL: Mise à jour d'une entrée SANS horodatage de mise à jour

J'ai un horodatage dans une table mysql avec l'attribut "ON UPDATE CURRENT_TIMESTAMP". Existe-t-il un moyen de désactiver manuellement la mise à jour de l'horodatage lors d'une occasion spéciale? (par exemple: mettre à jour l'entrée pour réviser un article de blog, mais pas pour la re-dater)

63
user114060

Existe-t-il un moyen de désactiver manuellement la mise à jour de l'horodatage lors d'une occasion spéciale? (par exemple: mettre à jour l'entrée pour réviser un article de blog, mais pas pour la re-dater)

On dirait que vous devez configurer la contrainte par défaut pour qu'elle remplisse la colonne lors de l'insertion uniquement:

DEFAULT CURRENT_TIMESTAMP

Si vous le changez uniquement, cela signifie que les révisions ne déclencheront pas la mise à jour de la valeur d'horodatage. IE: Si vous avez créé blogpost hier et corrigé une faute de frappe aujourd'hui, la date dans la colonne serait toujours celle d'hier.

43
OMG Ponies

Vous pouvez définir manuellement la valeur de la colonne sur sa valeur actuelle dans la commande de mise à jour:

UPDATE table SET x=y, timestampColumn=timestampColumn WHERE a=b;

Si vous ne définissez pas la valeur dans la requête, celle-ci sera mise à jour avec l'horodatage actuel conformément à la définition de la table.

122
Andy

Pour que votre table/horodatage se mette à jour automatiquement:

ALTER TABLE myTable
CHANGE myTimestampColumn
        myTimestampColumn TIMESTAMP NOT NULL
                       DEFAULT CURRENT_TIMESTAMP 
                       ON UPDATE CURRENT_TIMESTAMP;

Pour le fairepasmise à jour automatique:

ALTER TABLE myTable
CHANGE myTimestampColumn
        myTimestampColumn TIMESTAMP NOT NULL
                       DEFAULT CURRENT_TIMESTAMP;

REMARQUE: la partie "default current_timestamp" le définit simplement sur le cachet actuel au moment par défaut, car le champ n'est pas null. Vous pouvez supprimer les valeurs non nulle et par défaut, si vous le souhaitez.

19
Olie

n'utilisez pas d'horodatage, mais suivez les temps manuellement.

si vous voulez vraiment mettre à jour un enregistrement et ne le mettez pas à jour, utilisez l’horodatage:

UPDATE `table` SET `timestamp` = `timestamp`, `col` = 'new data' …;
9
knittl

Si vous modifiez l'heure de mise à jour, vous devez prendre en compte le fait que si la valeur a été mise à jour mais pas modifiée (la valeur de sauvegarde a été mise à jour), le "on update Current_timestemp" ne sera pas mis à jour et vous devrez définir le temps d'utilisation. manuellement

SET LastUpdatedDate=NOW() WHERE

L'idée est venue d'ici: Appuyez sur l'enregistrement MYSQL pour mettre à jour le champ TIMESTAMP

0
Pini Cheyni