非空约束要求设置默认值

9

我想在我的数据库中添加一个带有NOT NULL约束的新列,但Redshift提醒我应该定义默认值。 我认为NOT NULL的目的是强制定义,这是为什么呢?

ALTER TABLE users add column
  name varchar(255) NOT NULL
;

结果为:

[Amazon](500310) Invalid operation: ALTER TABLE ADD COLUMN defined as NOT NULL must have a non-null default expression;

有没有一种方法可以强制要求某列不能为空?

现有数据库中的行应该为新列设置什么值呢?它们不能为 null,因此您必须将默认值添加到新行。 - Colonel Thirty Two
2个回答

11

NOT NULL 是确保列中包含值的正确方式。 但是,因为您的表已经存在,已经存在于其中的行将没有一个新的 name 列的值,因此它们将违反 NOT NULL 约束。

通过指定默认值,您可以确保任何现有行都被分配该值,从而符合您的 NOT NULL 约束。


在摸索中,我发现可以创建一个带有行的 NOT NULL 约束的新表。你的回答很有道理,如果一个表已经存在,就不能事后添加 NOT NULL 约束,因为可能存在 NULL 值。当他们要求指定默认值时,这是表的元约束。 - Dylan Pierce
没错。当你创建表时,可以添加(或省略)任何约束条件,因为没有数据需要受到约束。 - Widor
1
PostgreSQL 不会为现有的空字段添加默认值,您必须手动更新这些记录。 - Eddie Prislac

6
如果列被定义为NOT NULL,那么它必须有一个值,对吗?
为什么不添加:DEFAULT default_expr

2
有时候我们并不想要默认值。 - Uyghur Lives Matter
7
那么,您如何遵守“NOT NULL”约束呢?负评完全是不必要的。 - th3o6a1d
1
我会先添加一个没有 NOT NULL 约束的列,填充适当的值,然后修改该列以添加 NOT NULL 约束(假设该列应该是 NOT NULL)。 - Uyghur Lives Matter
请参见上面Colonel Thirty Two的回答。 - th3o6a1d

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