我有一個包含數千行的表。由於該表最初並未使用created_at列構建,因此無法獲取其創建時間戳。儘管開始獲取未來行的時間戳是至關重要的。只爲新行添加默認爲NOW()的時間戳列
有沒有一種方法,我可以添加一個默認值NOW()的時間戳列,以便它不會將值填充到以前的行,但只爲未來的行?
如果我做ALTER
查詢,它填充的所有行與時間戳:
ALTER TABLE mytable ADD COLUMN created_at TIMESTAMP DEFAULT NOW()
我有一個包含數千行的表。由於該表最初並未使用created_at列構建,因此無法獲取其創建時間戳。儘管開始獲取未來行的時間戳是至關重要的。只爲新行添加默認爲NOW()的時間戳列
有沒有一種方法,我可以添加一個默認值NOW()的時間戳列,以便它不會將值填充到以前的行,但只爲未來的行?
如果我做ALTER
查詢,它填充的所有行與時間戳:
ALTER TABLE mytable ADD COLUMN created_at TIMESTAMP DEFAULT NOW()
你可以使用ALTER TABLE添加默認規則,
ALTER TABLE mytable ADD COLUMN created_at TIMESTAMP DEFAULT NOW()
然後立即設置爲null所有當前存在的行:
UPDATE mytable SET created_at = NULL
然後從這個點上DEFAULT
將生效。
試着這麼做
ALTER TABLE表名ADD CONSTRAINT [DF_table_name_Created] DEFAULT(GETDATE())在[created_at]
與您的表的名稱替換table_name的
您需要添加列,默認爲null
,然後更改列以使其具有默認值now()
。
ALTER TABLE mytable ADD COLUMN created_at TIMESTAMP;
ALTER TABLE mytable ALTER COLUMN created_at SET DEFAULT now();
它原則上是好的,儘管它確實承擔了更新的重要性,它可能觸發觸發器。 –
是這樣做的。 – Artur
@Artur:Philip介紹的解決方案就是要走的路。 'UPDATE'不是必需的。如果將列默認添加到*現有*列,則現有的行不受影響。如果您在同一命令中添加列和默認值,則只填充默認值。 –