2016-08-12 64 views
29

我有一個包含數千行的表。由於該表最初並未使用created_at列構建,因此無法獲取其創建時間戳。儘管開始獲取未來行的時間戳是至關重要的。只爲新行添加默認爲NOW()的時間戳列

有沒有一種方法,我可以添加一個默認值NOW()的時間戳列,以便它不會將值填充到以前的行,但只爲未來的行?

如果我做ALTER查詢,它填充的所有行與時間戳:

ALTER TABLE mytable ADD COLUMN created_at TIMESTAMP DEFAULT NOW() 

回答

9

你可以使用ALTER TABLE添加默認規則,

ALTER TABLE mytable ADD COLUMN created_at TIMESTAMP DEFAULT NOW() 

然後立即設置爲null所有當前存在的行:

UPDATE mytable SET created_at = NULL 

然後從這個點上DEFAULT將生效。

+0

它原則上是好的,儘管它確實承擔了更新的重要性,它可能觸發觸發器。 –

+0

是這樣做的。 – Artur

+2

@Artur:Philip介紹的解決方案就是要走的路。 'UPDATE'不是必需的。如果將列默認添加到*現有*列,則現有的行不受影響。如果您在同一命令中添加列和默認值,則只填充默認值。 –

0

試着這麼做

ALTER TABLE表名ADD CONSTRAINT [DF_table_name_Created] DEFAULT(GETDATE())在[created_at]

與您的表的名稱替換table_name的

48

您需要添加列,默認爲null,然後更改列以​​使其具有默認值now()

ALTER TABLE mytable ADD COLUMN created_at TIMESTAMP; 
ALTER TABLE mytable ALTER COLUMN created_at SET DEFAULT now(); 
相關問題