2009-12-19 5 views
37

En MySQL, j'en ai marre d'ajouter les colonnes dt_created et dt_modified (qui sont des horodatages de date pour la création et la dernière modification respectivement) à toutes les tables que j'ai dans ma base de données.MySQL auto-store datetime pour chaque ligne

Chaque fois que je INSERT ou UPDATE la base de données, je vais devoir utiliser le mot-clé NOW(). Cela va partout dans ma persistance.

Existe-t-il une alternative efficace où MySQL peut stocker automatiquement au moins les données de la ligne qui est insérée et permettez-moi de le récupérer?

+0

Ma mauvaise grammaire se cache sur les profondeurs sombres de Stack Overflow. Merci @Eric Leschinski. – mauris

Répondre

60

Vous pouvez utiliser des contraintes de défaut pour définir l'horodatage:

ALTER TABLE 
MODIFY dt_created datetime DEFAULT CURRENT_TIMESTAMP 

ALTER TABLE 
MODIFY dt_modified datetime DEFAULT ON UPDATE CURRENT_TIMESTAMP 

alors vous ne devez spécifier NOW() dans vos déclarations INSERT/UPDATE.

Référence: TIMESTAMP properties

+0

ahh Je ne savais pas que vous pouvez utiliser quelque chose comme 'ON UPDATE CURRENT_TIMESTAMP' – mauris

+3

** Information supplémentaire: ** Une colonne TIMESTAMP dans une table peut avoir l'horodatage actuel comme valeur par défaut pour l'initialisation de la colonne, comme la mise à jour automatique valeur, ou les deux. Il n'est pas possible que l'horodatage actuel soit la valeur par défaut pour une colonne et la valeur de mise à jour automatique pour une autre colonne. http://dev.mysql.com/doc/refman/5.0/en/timestamp-initialization.html – alditis

+5

'DEFAULT ON UPDATE CURRENT_TIMESTAMP' n'est pas valide SQL.Il doit être soit 'dt_modified datetime ON UPDATE CURRENT_TIMESTAMP' ou 'dt_modified datetime DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP' Si vous prétendez toujours qu'il est valide, alors MySQL Workbench a peut-être un problème à mentionner. –

1

question similaire a été posée ici « Timestamp for MySQL » le champ d'horodatage mettra à jour chaque fois qu'il est accessible. Vous pouvez également considérer un Trigger placé sur la table en question pour remplir automatiquement ces champs pour vous. Selon l'environnement, certains magasins/entreprises n'aiment pas l'utilisation de déclencheurs et vous devrez peut-être trouver des solutions de rechange.

7
ALTER TABLE `tablename` CHANGE `dt` `dt` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP 

devrait être le bon code.

3

Eh bien, vous ne pouvez pas avoir les deux:

mysql doc:

Il est impossible d'avoir l'horodatage actuel soit la valeur par défaut pour une colonne et la valeur mise à jour automatique pour une autre colonne.

Triste, n'est-ce pas?

Vous following this tip

8

pourrait cependant nul utiliser au lieu de maintenant() Si vous utilisez phpmyadmin vous pouvez le faire par:

enter image description here

0

phpMyAdmin vous pouvez définir enter image description here

OU utiliser cette requête

ALTER TABLE `tablename` 
    CHANGE `dt_created` `dt_created` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP