Sql Oracle约束错误

Sql Oracle约束错误,sql,oracle,Sql,Oracle,我有一个表x,并添加了一个数据类型为number的新列abc。新列成功地将空值加载到表x 当我试图添加具有notnull约束的同一列时,它给出了一个错误:“表必须为空才能添加强制(notnull)列” 我预期会出现错误,因为其中没有数据,所以我无法使用notnull约束。但是,什么是没有预料到的错误。为什么表必须为空才能添加该约束?有人能解释一下吗?这是因为一旦创建列,就会立即违反null约束。您也许可以提供一个默认值 由于缺少行,空表不会出现此问题。如果表中没有数据,则不会违反not NULL

我有一个表
x
,并添加了一个数据类型为
number
的新列
abc
。新列成功地将空值加载到表
x

当我试图添加具有
notnull
约束的同一列时,它给出了一个错误:“表必须为空才能添加强制(notnull)列”


我预期会出现错误,因为其中没有数据,所以我无法使用
notnull
约束。但是,什么是没有预料到的错误。为什么表必须为空才能添加该约束?有人能解释一下吗?

这是因为一旦创建列,就会立即违反null约束。您也许可以提供一个默认值


由于缺少行,空表不会出现此问题。

如果表中没有数据,则不会违反
not NULL
约束。但如果您至少有一行,则会违反该约束,因为数据库必须为每行创建一个列值
NULL

您可以使用默认值来解决此问题:

ALTER TABLE tablename
ADD column_name NUMBER NOT NULL
DEFAULT '*';

试想一下,当您将某些内容标记为非null时,数据库可以对现有的null做什么呢。所以,桌子必须是空的!此外,ddl永远不能触及现有数据。。但是对于truncate,它实际上只是删除了整个数据。@Maheswaran ravisankar感谢@All:非常感谢您在这方面的帮助