有人可以解释为什么在下面的语句中,当它们看起来相同时,一个有效,而另一个无效(忽略一个事实是CREATE,另一个是ALTER)。
“ ALTER TABLE只允许添加可以包含空值或指定了DEFAULT定义的列”,为什么CREATE TABLE允许添加没有指定默认值的空列?
CREATE TABLE Test
(
ID int NOT NULL
);
ALTER TABLE Test ADD
ID int NOT NULL;
答案 0 :(得分:1)
您的查询版本不起作用,因为该表已经有一个名为id
的列。您不能再添加一个。
但是,您可以添加一个新列,这样就可以了:
ALTER TABLE Test ADD ID2 int NOT NULL;
或者更确切地说,这在空表上有效。您不能将没有NOT NULL
的{{1}}列添加到具有任何行的表中。现有行将获得该列。但是有什么价值呢?由于DEFAULT
的限制,不能为NULL
。而且没有其他NOT NULL
值。
答案 1 :(得分:1)
假设一个表包含2行数据。
这句话:
ALTER TABLE Test ADD ID int NOT NULL;
(如果可以执行)将创建一个新列,而现有的2行将具有一个id = NULL
,尽管您将该列定义为NOT NULL
!
看到问题了吗?
但是对于CREATE
语句来说,就没有这样的问题,因为在创建时没有数据。