Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 为什么是;“不为空”;不是约束?_Sql_Sql Server - Fatal编程技术网

Sql 为什么是;“不为空”;不是约束?

Sql 为什么是;“不为空”;不是约束?,sql,sql-server,Sql,Sql Server,如果要向现有列表添加主键: 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; notnull不是一个约束吗? 主键的原因是添加约束 对于非空不是添加约束,而是更改列

如果要向现有列表添加主键:

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;
notnull
不是一个约束吗? 主键的原因是添加约束

对于
非空
不是
添加约束
,而是
更改列

在我看来,
notnull
也是一种约束。

在声明参数时,您可以直接使用
notnull
内联。像这样:

CREATE TABLE People
(
    ID INT NOT NULL,
    Name NVARCHAR(100) NOT NULL,
    Notes NVARCHAR(MAX) NULL
)


指定
notnull
意味着“该列必须有一个值”。它只意味着某些值必须存在,但它并没有说明这些值应该是什么。请注意,在SQL术语中,
NULL
本身不是一个值,而是没有值


另一方面,
约束是允许值的规则。您甚至可以对空列进行约束,然后仅当存在非空值时,才对允许的值执行这样的
约束。

将其视为
NULL
非NULL
实际上是类型声明的一部分。可以保存
整数
并且可以保存
NULL
的字段与可以保存
整数
但不能保存
NULL
的字段是不同的类型

考虑

create type IntegerIsSometimesNull from integer null

create type IntegerIsNeverNull  from integer not null

go

create table DifferentType ( N IntegerIsSometimesNull,
                             I IntegerIsNeverNull      )
这里我们看到
NULL
notnull
实际上是类型声明的一部分

还要考虑这些字段在数据库中需要不同的空间量

在我看来,NOTNULL也是一种约束

对。数据类型、空值、检查约束和外键约束都与定义列的“域”有关。“域”是列的一组可能值,是关系模型的基本概念


在大多数RDBMS系统中,域是通过数据类型和约束的组合来实现的。

请看这个问题,NOT NULL是一个约束,其意义与NVARCHAR(50)是一个约束相同。您还可以在表
CREATE
语句中指定列是
主键<代码>创建表MyTable(ID int主键)
是有效的语法(尽管我不建议使用它,因为OK会自动生成名称)。另一种思考方式是,在功能性更强的编程术语中,可空性是列类型的一部分,约束是类型系统无法处理的值限制,类似于合同设计。感谢您抽出时间回答!如果答案对您有帮助,您可以投票和/或接受。感谢您抽出时间回答!感谢您抽出时间回答!