具有'not null'约束的唯一键与主键之间有什么区别?

时间:2013-12-05 16:01:01

标签: sql sql-server-2008

我想知道这两个键之间的区别。

具有not null的唯一键限制它们在数据库中的存储方式

当我们对这些键进行Select,Insert,Update, Delete操作时会有什么不同。

4 个答案:

答案 0 :(得分:18)

主键必须是唯一且非空的,因此从这个角度看它们是相同的。但是,一个表只能有一个主键,而您可以有多个唯一的非空键。

大多数系统还使用元数据分别标记主键,以便设计师可以识别它们等。

  

主键和唯一键之间的区别在于它们在数据库中的存储方式没有空约束

如果两者都是CLUSTEREDNON CLUSTERED,则唯一的区别是大多数系统中将索引标记为PK的元数据。

  

当我们对这些密钥进行SelectInsertUpdateDelete操作时会有什么不同

无。

答案 1 :(得分:7)

回答你的评论,是的!通常,SQL Server 2008中存储唯一键和主键的方式存在巨大差异。

默认情况下,唯一键 (您可以更改)将创建为非聚集索引,默认情况下将PK创建为聚簇索引 (你也可以改变它。)

非群集意味着它将存储在“附加”到表中的结构中,并占用磁盘空间。

群集意味着记录将实际存储在该物理顺序中,不会消耗磁盘空间,这就是您的表只能拥有一个聚簇索引的原因。 (如果你想知道......不,你不能在表中获得2个非聚集PK,即使它们是非聚集的,PK也是唯一的。)

答案 2 :(得分:0)

主键不能为空,每个表只能有一个。

唯一键可以包含空值,每个表可以有多个。

答案 3 :(得分:0)

一个。主键和唯一键都强制定义它们的列的唯一性。但默认情况下,主键在列上创建聚簇索引,而唯一键默认创建非聚簇索引。另一个主要区别是主键不允许NULL,但唯一键只允许一个NULL。