sql - sql为什么"非空"不是约束?

如果我想将PRIMARY KEY添加到现有列表:


ALTER TABLE table_name


ADD CONSTRAINT column_name_PK PRIMARY KEY (column_name);



现在,如果我想在现有列表中添加not NULL:


ALTER TABLE table_name


ALTER column column_name INTEGER(or other data type) NOT NULL;



NOT NULL 不是约束主键是 ADD CONSTRAINT的原因?

对于 NOT NULL,不是 ADD CONSTRAINT,而是 ALTER COLUMN? 在我看来,NOT NULL 也是一种约束。

时间:

指定 NOT NULL 意味着'列必须具有值'。 它只意味着必须存在某些值,但它没有说明这些值应该是什么。 请注意,在SQL术语中,NULL本身不是值,但缺少值。

另一方面,CONSTRAINT 是允许值的规则。 你甚至可以对NULL列有一个约束,然后只有当存在非NULL值时才强制执行允许值的这种CONSTRAINT。

当你声明参数时,你可以只使用 NOT NULL 。 就像这个:


CREATE TABLE People


(


 ID INT NOT NULL,


 Name NVARCHAR(100) NOT NULL,


 Notes NVARCHAR(MAX) NULL


)




可以将它看作是 NULL 或者 NOT NULL,实际上是类型声明的一部分。 一个可以保存 Integer 并且可以保存 NULL的字段是一种不同于 Integer的类型,但从来没有 NULL

考虑


create type IntegerIsSometimesNull from integer null



create type IntegerIsNeverNull from integer not null



go



create table DifferentType ( N IntegerIsSometimesNull,


 I IntegerIsNeverNull )



在这里我们看到 NULLNOT NULL 实际上是类型声明的一部分。

另外,这些字段需要在数据库中使用不同的空间量。

...