2010-09-09 7 views
0

J'ai soulevé une question à ce sujet il y a quelque temps, mais j'ai toujours un problème. J'ai une base de données mysql5 avec une table des ventes qui contient un horodatage pour représenter une vente. Si un champ de la table des ventes est modifié ou modifié, l'horodatage est mis à jour à l'heure actuelle (l'heure de la modification). Pour éviter cela, j'ai désélectionné l'option on_update_select_current_timestamp mais les changements d'horodatage sont-ils toujours présents?Mises à jour de timestamp mysql lorsque l'enregistrement est modifié

Voilà comment le champ regarde dans phpmyadmin

alt text

Est-ce que quelqu'un a une idée de ce que je devrais faire, décochant l'option CURRENT_TIMESTAMP semble réinitialiser le déclencheur on_update_select_current_timestamp

+0

Je sais que cela a été demandé il y a longtemps, mais ma solution était de définir la valeur par défaut à null et ne pas avoir mise à jour avec current_timestamp. De cette façon, il n'a pas été mis à jour et n'a pas affecté mes données précédentes. Dans phpmyadmin (4.2.11), vous le faites en cochant la case null. – GreeKatrina

Répondre

0

si vous ne voulez pas ce champ doit être mis à jour automatiquement, n'utilisez pas du tout le champ de type timestamp
Utilisez plutôt datetime.

+0

Bit d'une question stupide ici mais ... Ma base de données a des milliers d'enregistrements, si je change la table de base de données afin que le champ timestamp est un datetime va-t-il bousiller mon site, par exemple mes insertions sql ne fonctionnera pas, les heures ne seront pas formatées correctement? –

+0

@Mike oui c'est un peu une question stupide. Vous devez également changer votre code. Ma réponse ne portait pas sur votre code hérité et sur la façon de gérer les défauts de conception stupides. Mais juste sur la conception de base de données, comment utiliser votre outil correctement. Conséquences pour le code hérité est une autre question. Bien qu'il n'y ait rien de mauvais dans la réécriture de code. Cela s'appelle refactoring et cela fait partie de votre travail. –

+0

Cependant, vous avez de la chance, car dans timelamp5 mysql5 a le même format que datetime, afaik –

0

Vérifiez les définitions de table, si l'option CURRENT-TIMESTAMP est réellement désactivée.

Si ses personnes handicapées, il devrait ressembler ...

CREATE TABLE `sometable` (
    ...somefields... 
    `Sale_Time` TIMESTAMP NOT NULL DEFAULT '0000-00-00 00:00:00' INT(11) DEFAULT NULL, 
    ...somefields... 
) ENGINE=someengine 

... sinon le CURRENT-TIMESTAMP serait visible dans cette ligne. Lorsqu'il est désactivé, il ne se met pas à jour lors d'une mise à jour, à moins qu'une autre fonction de base de données (Trigger ou autre) ne le modifie lors de la mise à jour des champs.