在 SQL Server 中,是否可以在同一个键上没有 CLUSTERED 或 NONCLUSTERED 索引的表上有一个 PRIMARY KEY?

UB0*_*B01 7 index sql-server-2008 clustered-index clustered-primary-key

在 Sql Server (2008) 中,是否可以PRIMARY KEY在一组列上有一个而没有同一组列上的任何一个CLUSTEREDNONCLUSTERED索引?

我知道PRIMARY KEYCLUSTERED INDEXkey 是不同的概念,我们可以在PRIMARY KEY没有CLUSTERED INDEX它的情况下创建(见下文)。

ALTER TABLE dbo.Sample 
ADD CONSTRAINT PK_Sample_SeqGUID_Col1 PRIMARY KEY NONCLUSTERED (SeqGUID_Col1)
Run Code Online (Sandbox Code Playgroud)

但我的问题是看看是否可以PRIMARY KEY在没有CLUSTEREDNONCLUSTERED索引的表上创建。

Mar*_*ith 12

简而言之,没有。根据定义,主键需要唯一性,主键字段上的索引是数据库引擎强制执行此约束的途径。

来自BOL

为表指定 PRIMARY KEY 约束时,数据库引擎通过为主键列创建唯一索引来强制数据唯一性。该索引还允许在查询中使用主键时快速访问数据。因此,选择的主键必须遵循创建唯一索引的规则。


ype*_*eᵀᴹ 8

不,主键约束总是通过唯一索引在 SQL-Server 中强制执行。索引可以是聚集的或非聚集的。如果您不指定哪种类型,则默认CLUSTERED为主键。从MSDN 文档中,CREATE TABLE

CLUSTERED | NONCLUSTERED

指示为PRIMARY KEYorUNIQUE约束创建聚集索引或非聚集索引。PRIMARY KEY约束默认为CLUSTEREDUNIQUE约束默认为NONCLUSTERED

在一个CREATE TABLE语句中,CLUSTERED只能指定一个约束。如果CLUSTEREDUNIQUE约束指定了并且PRIMARY KEY还指定了约束,则PRIMARY KEY默认为NONCLUSTERED