我知道可以使用约束来放置多个字段:
CREATE TABLE Persons (
ID int NOT NULL,
LastName varchar(255) NOT NULL,
FirstName varchar(255),
Age int,
CONSTRAINT PK_Person PRIMARY KEY (ID,LastName)
);
但是,如果我们必须比较下面的这两个,是否有区别?
Create table client
(cod_clt int identity not null,
Nom t,
Dn datetime not null,
Credit numeric(6,2) not null,
Constraint x1 check (credit between 100 and 1456.25),
Constraint x2 primary key (cod_clt)
)
和此:
Create table client
(cod_clt int primary key,
Nom t,
Dn datetime not null,
Credit numeric(6,2) not null,
Constraint x1 check (credit between 100 and 1456.25)
)
SQL Server中的约束有6个类:
- 不是null
- 唯一键
- 主键
- foriegn键
- 检查
- 默认
(包括我自己在内的某些人会争辩说列数据类型和唯一索引也是约束的类型,但我离题了。(
在SQL Server中,约束有两种类型:列级和表级别。
不是null是列级约束,所有其他都可以是表或列级。主键和外键可以由一个或多个列组成;当它们由多个列组成时,它们被称为"复合密钥"。复合键必须是表级。
列和表级别约束之间最显着的区别是表级别允许您给约束一个有意义的名称,这就是我个人更喜欢它们的原因。
在第一个示例中,您有一个表级别的主键约束,它是一个复合键。在您的最后两个示例中,没有复合键,这就是为什么它可以是表和列级的原因。最后两个示例的关键区别在于,您可以将表级别的主键命名,而不是列级。对于正确管理元数据的人来说,这是一件大事。
最后,一件事使主要键&唯一的约束是特殊的,因为当您创建它们时,您可以创建索引。主键的默认行为还包括创建聚类索引。决定创建集群索引和/或唯一索引的决定是一个很大的索引,因此当我定义主键(和唯一(键时,我都包括关键字群集或非集群,以免依赖此键的默认系统行为。
>这有一些关于约束的好链接:
https://technet.microsoft.com/en-us/library/ms189862(v = sql.105(.aspx-(Microsoft(https://www.w3schools.com/sql/sql_constraints.asp(W3学校(