web-dev-qa-db-fra.com

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. Puisque la table n'a pas été construite avec la colonne created_at au départ, il est impossible d'obtenir leur horodatage de création. Il est cependant crucial de commencer à obtenir les horodatages des futures lignes. 

Existe-t-il un moyen d'ajouter une colonne timestamp avec la valeur par défaut NOW () afin qu'elle ne remplisse pas les valeurs des lignes précédentes, mais uniquement pour les futures?

Si je fais la requête ALTER, il remplit toutes les lignes avec timestamp:

ALTER TABLE mytable ADD COLUMN created_at TIMESTAMP DEFAULT NOW()
60
Artur

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();
91
Philip Couling

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

Ensuite, à partir de ce moment, la variable DEFAULT prendra effet.

23
Renzo

Essayez quelque chose comme: -

ALTER TABLE table_name ADD  CONSTRAINT [DF_table_name_Created] 
DEFAULT (getdate()) FOR [created_at];

en remplaçant table_name par le nom de votre table.

0