是时候通过方法向新列添加默认值了
Posted
技术标签:
【中文标题】是时候通过方法向新列添加默认值了【英文标题】:Time to add default values to a new column by approach 【发布时间】:2015-05-20 17:25:55 【问题描述】:我需要向现有 SQL 表添加一个新的非空列并将其设置为默认值。我知道有两种不同的方法:
ALTER TABLE Foo
ADD Col CHAR(1) NOT NULL DEFAULT('N')
ALTER TABLE Foo
ADD Col CHAR(1)
GO
UPDATE Foo SET Col = 'N'
GO
ALTER TABLE Foo ALTER COLUMN Col CHAR(1) NOT NULL DEFAULT('N')
也就是说,在第二种方法中,有三个单独的批次:首先创建列,然后回填默认值,然后添加not null
约束和默认值。
这里的一位开发人员断言,第二种方法更快,锁定时间更短,而方法#1 会产生巨大的日志。我一直在尝试重现这一点,但还没有做到。可能是我的示例数据集太小,而他所描述的内容仅在大型数据库或特定模式下才明显。
与其花时间生成越来越大的数据集并反复修改架构,我想我会求助于这里的专家并得到精简。对于大型数据集,第二种方法实际上更好吗?
【问题讨论】:
【参考方案1】:所以我决定测试一下。 在 Sql server 2012 上,在具有超过 1360 万条记录的表上执行第一个更改表需要 不到一秒。
对于第二种方法,需要 49 秒,所以我会说您的开发人员错了。
【讨论】:
以上是关于是时候通过方法向新列添加默认值了的主要内容,如果未能解决你的问题,请参考以下文章
mysql 设置了默认值了为啥还是会报column cannot be null
mysql 设置了默认值了为啥还是会报column cannot be null