我有一个包含数千行的表。由于该表最初并未使用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'不是必需的。如果将列默认添加到*现有*列,则现有的行不受影响。如果您在同一命令中添加列和默认值,则只填充默认值。 –