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会自动生成名称)。另一种思考方式是,在功能性更强的编程术语中,可空性是列类型的一部分,约束是类型系统无法处理的值限制,类似于合同设计。感谢您抽出时间回答!如果答案对您有帮助,您可以投票和/或接受。感谢您抽出时间回答!感谢您抽出时间回答!