208 votes

Ajouter une colonne d'horodatage avec NOW () par défaut pour les nouvelles lignes uniquement

J'ai une table qui a des milliers de lignes. Depuis, la table n'était pas construit avec colonne created_at d'abord, il n'existe aucun moyen d'obtenir la création d'horodatage. Il est essentiel cependant de commencer à obtenir le timestamp pour les futures lignes.

Est il possible que je peux ajouter une colonne de type timestamp avec la valeur par défaut MAINTENANT() afin de ne pas remplir les valeurs précédentes des lignes, mais seulement pour l'avenir?

Si je ne l' ALTER de la requête, il remplit toutes les lignes avec horodatage:

ALTER TABLE mytable ADD COLUMN created_at TIMESTAMP DEFAULT NOW()

277voto

couling Points 2445

Vous devez ajouter la colonne avec une valeur par défaut de null , puis modifier la colonne pour avoir la valeur par défaut now() .

 ALTER TABLE mytable ADD COLUMN created_at TIMESTAMP;
ALTER TABLE mytable ALTER COLUMN created_at SET DEFAULT now();
 

75voto

Renzo Points 15887

Vous pouvez ajouter la règle par défaut avec la table alter,

 ALTER TABLE mytable ADD COLUMN created_at TIMESTAMP DEFAULT NOW()
 

puis immédiatement mis à null toutes les lignes existantes:

 UPDATE mytable SET created_at = NULL
 

À partir de ce moment, les DEFAULT prendront effet.

-2voto

Essayez quelque chose comme

ALTER TABLE nom_table ADD CONSTRAINT [DF_nom_table_Créée] DEFAULT (getdate ()) FOR [created_at]

remplacer le nom_table par le nom de votre table

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X