这两个查询之间有什么不同吗?如果有什么会更快?
ALTER TABLE mytable ADD COLUMN newcolumn VARCHAR(64) DEFAULT NULL;
ALTER TABLE mytable ADD COLUMN newcolumn VARCHAR(64) NULL;
它是如何在引擎盖下工作的?如果我们有一个包含数百万行的表,那么任何一个查询都会重写每一行以将NULL值设置为新列吗?
答案 0 :(得分:1)
第一个语句添加一个默认值为NULL
的列,这意味着如果未在插入中明确包含,则插入将设置为null。
第二个语句添加一个列为“约束”的列,列值可能为NULL
,与NOT NULL
约束相反。
答案 1 :(得分:0)
https://www.postgresql.org/docs/current/static/sql-createtable.html
NULL允许列包含空值。这是 默认值。
并进一步
DEFAULT default_expr
...
如果列没有默认值,则默认值为null。
因此,您的两个语句将列重置为两个默认创建选项。
您的列中的默认值不会超过默认值。如果两者都不是默认的 - 将花费相同的时间,因为它只会更新目录,更改两个,一个或没有修饰符......