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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jsf-2/2.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_Tsql - Fatal编程技术网

Sql 约束主键和普通主键之间有什么区别?

Sql 约束主键和普通主键之间有什么区别?,sql,sql-server,tsql,Sql,Sql Server,Tsql,我知道可以使用约束放置多个字段,如下所示: 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 nul

我知道可以使用约束放置多个字段,如下所示:

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类约束:

  • 非空
  • 唯一键
  • 主键
  • 外键
  • 检查
  • 违约
  • (包括我在内的一些人会认为列数据类型和唯一索引也是约束类型,但我离题了。)

    在SQL Server中,有两种类型的约束:列级别和表级别

    NOTNULL是一个列级约束,所有其他约束可以是表级或列级。主键和外键可以由一列或多列组成;当它们由多个列组成时,称为“复合键”。复合键必须是表级的

    列级和表级约束之间最显著的区别是,表级允许您为约束指定一个有意义的名称,这就是我个人喜欢它们的原因

    在第一个示例中,您有一个表级主键约束,它是一个复合键。在上两个示例中,没有复合键,这就是为什么它可以是表级和列级。最后两个示例中的关键区别在于,您可以命名表级主键,但不能命名列级主键。对于正确管理元数据的人来说,这是一件大事

    最后,主键&唯一约束的一个特点是,当您创建它们时,您可以创建一个索引。主键的默认行为也是创建聚集索引。创建聚集索引和/或唯一索引的决定非常重要,因此在定义主键(和唯一键)时,我会包含聚集或非聚集关键字,以避免依赖默认系统行为

    这里有几个关于约束的好链接:

    -(微软) (W3学校)

    SQL server中有6类约束:

  • 非空
  • 唯一键
  • 主键
  • 外键
  • 检查
  • 违约
  • (包括我在内的一些人会认为列数据类型和唯一索引也是约束类型,但我离题了。)

    在SQL Server中,有两种类型的约束:列级别和表级别

    NOTNULL是一个列级约束,所有其他约束可以是表级或列级。主键和外键可以由一列或多列组成;当它们由多个列组成时,称为“复合键”。复合键必须是表级的

    列级和表级约束之间最显著的区别是,表级允许您为约束指定一个有意义的名称,这就是我个人喜欢它们的原因

    在第一个示例中,您有一个表级主键约束,它是一个复合键。在上两个示例中,没有复合键,这就是为什么它可以是表级和列级。最后两个示例中的关键区别在于,您可以命名表级主键,但不能命名列级主键。对于正确管理元数据的人来说,这是一件大事

    最后,主键&唯一约束的一个特点是,当您创建它们时,您可以创建一个索引。主键的默认行为也是创建聚集索引。创建聚集索引和/或唯一索引的决定非常重要,因此在定义主键(和唯一键)时,我会包含聚集或非聚集关键字,以避免依赖默认系统行为

    这里有几个关于约束的好链接:

    -(微软)
    (W3学校)

    你可以命名pk约束,也可以不命名。因此,除了有一个约束名称以后可以帮助你之外,没有什么区别?它们是两种不同的方式来执行相同的事情,尽管你的第一种形式允许你命名
    主键
    约束
    ,而另一种形式则不允许。有时这取决于你想做什么,但大多数时候这是风格的问题。正确的结论!作为最佳实践,请始终为约束指定有意义的全名。您可以命名pk约束,也可以不命名pk约束。因此,除了有一个约束名称可以在以后帮助您之外,没有什么区别?它们是执行相同操作的两种不同方式,尽管您的第一个表单确实允许您命名
    主键
    约束
    ,而另一个则不然。有时这取决于你想做什么,但大多数时候这是风格的问题。正确的结论!作为最佳实践,始终为约束提供有意义的全名。