MySQL datetime auto magasin pour chaque ligne
Question
En MySQL, je suis malade d'ajouter les colonnes dt_created
et dt_modified
(qui sont l'horodatage de la date de création et de dernière modification, respectivement) à toutes les tables que j'ai dans ma base de données.
Chaque fois que je INSERT
ou UPDATE
la base de données, je vais devoir utiliser le mot clé NOW()
. Cela va dans toute ma persévérance.
est-il une alternative efficace où MySQL peut stocker automatiquement au moins la DataTime de la ligne qui est insérée et laissez-moi récupérer?
La solution
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 CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
Ensuite, vous ne devez spécifier NOW()
dans vos instructions INSERT / UPDATE.
Référence: propriétés TIMESTAMP
Autres conseils
Si vous utilisez phpmyadmin vous pouvez le faire par:
ALTER TABLE `tablename` CHANGE `dt` `dt` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP
devrait être le bon code.
Eh bien, vous ne pouvez pas avoir les deux:
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.
Sad, est-ce pas?
Vous pouvez cependant au lieu de maintenant () utiliser null suivant cette astuce
question similaire a été posée ici « Horodatage pour MySQL » le champ d'horodatage mettra à jour chaque fois il est accessible. Vous pouvez également envisager un Trigger placé sur la table en question pour remplir automatiquement ces champs pour vous. En fonction de l'environnement des magasins / entreprises n'aiment pas l'utilisation des déclencheurs et vous pourriez donc devoir trouver contournements de travail de rechange.
Dans phpmyadmin vous pouvez définir
OR utiliser cette requête
ALTER TABLE `tablename`
CHANGE `dt_created` `dt_created` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP