En MySQL, j'en ai marre d'ajouter les colonnes dt_created
et dt_modified
(qui sont des horodatages pour la création et la dernière modification, respectivement) à toutes les tables de ma base de données.
Chaque fois que je INSERT
ou UPDATE
la base de données, je devrai utiliser le mot clé NOW()
. Cela va partout dans ma persistance.
Existe-t-il une alternative efficace permettant à MySQL de stocker automatiquement au moins le temps de la ligne insérée et de me le récupérer?
Vous pouvez utiliser les contraintes DEFAULT 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
Il ne serait alors pas nécessaire de spécifier NOW()
dans vos instructions INSERT/UPDATE.
Référence: Propriétés TIMESTAMP
Si vous utilisez phpmyadmin vous pouvez le faire en:
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 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.
Triste, n'est-ce pas?
Vous pouvez cependant utiliser null à la place de now () en suivant ce conseil
Une question similaire a été posée ici " Timestamp for MySQL " le champ timestamp sera mis à jour à chaque accès. Vous pouvez également envisager de placer un Trigger sur la table en question pour renseigner automatiquement ces champs. En fonction de l'environnement, certains magasins/entreprises n'apprécient pas l'utilisation de déclencheurs et vous devrez peut-être trouver d'autres solutions de rechange.
Dans phpmyadmin, vous pouvez définir
OU Utilisez cette requête
ALTER TABLE `tablename`
CHANGE `dt_created` `dt_created` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP