具有默认约束的数据库列

5
我正在创建一个数据库列,如下所示:

Alter table tablename
add column columnname null
add constraint df_columnname default 0

在执行上述SQL后,新列将添加到表中,并带有null值。
这里的“约束df_cloumnname”是否没有意义?
请澄清一下。
1个回答

10
如果你的列是可空的,那么添加一个默认约束不会产生影响 - 它可以为空,并且仍然为空。在这种情况下,DEFAULT CONSTRAINT 只适用于正在添加的新行(并且没有明确为你的列指定值的行)。
如果你的列不允许为空,那么默认约束将立即应用。
如果你正在使用 SQL Server(你没有明确指定清楚 - SQL 是查询语言 - 但不是数据库产品...),而且你想要有一个可空列和默认约束,并且你希望该值应用于现有的行,请使用此语法:
ALTER TABLE dbo.tablename
ADD columnname NULL
  CONSTRAINT df_columnname DEFAULT 0 WITH VALUES

在你的命令中添加WITH VALUES,你应该能够获得所需的结果。


@Avinash:那么你应该始终在你的问题中使用 sql-server 标签。 - marc_s
1
我不理解 WITH values 选项,请您能否澄清一下。在我的数据库中,我有一个已存在的表格,其中数据库列是可空的,并且还有一个默认约束条件。我感到困惑!!! - Sai Avinash
数据库列可为空,在表中进行条目输入后,存储在该列中的值是约束中指定的默认值而不是空值。 - Sai Avinash
@Avinash:正如你所看到的:仅添加具有默认约束的可空列不会将值添加到现有行;当使用WITH VALUES时,对于每个现有行,将插入定义的默认值。 - marc_s

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接