Postgresql:alter table上的默认NULL和NULL有什么不同

Postgresql:alter table上的默认NULL和NULL有什么不同,postgresql,Postgresql,这两个查询之间有什么不同吗?如果有什么会更快 ALTER TABLE mytable ADD COLUMN newcolumn VARCHAR(64) DEFAULT NULL; ALTER TABLE mytable ADD COLUMN newcolumn VARCHAR(64) NULL; 它在引擎盖下是如何工作的?如果我们有一个包含数百万行的表,任何一个查询是否会重写每一行以将NULL值设置为新列?第一条语句添加一个默认值为NULL的列,这意味着如果insert中未显式包含insert

这两个查询之间有什么不同吗?如果有什么会更快

ALTER TABLE mytable ADD COLUMN newcolumn VARCHAR(64) DEFAULT NULL;
ALTER TABLE mytable ADD COLUMN newcolumn VARCHAR(64) NULL;

它在引擎盖下是如何工作的?如果我们有一个包含数百万行的表,任何一个查询是否会重写每一行以将NULL值设置为新列?

第一条语句添加一个默认值为
NULL
的列,这意味着如果insert中未显式包含insert,则insert将设置为NULL

第二条语句添加了一个列,该列具有一个“约束”,即列值可以是
NULL
,与
非NULL
约束相反

NULL该列允许包含NULL值。这是 默认

而且

默认表达式

如果列没有默认值,则默认值为null

所以您的两个语句将列重置为两个默认创建选项


列中的非默认项将比默认项花费更长的时间。如果两者都不是默认的-将花费相同的时间,因为它将只更新目录,更改两个、一个或没有修改器…

可能是关于mysql的。谢谢,但在大表上的分数有什么不同吗?没有可测量的差异,它们只是以不同的方式陈述默认行为。据我所知,它们将导致相同的定义。尝试创建一些测试数据库,并使用
pg_dump
转储模式,以查看它们是否以不同方式保存。我猜他们的输出是一样的。