SQL Server中唯一的密钥相关问题

时间:2011-02-15 07:45:27

标签: sql sql-server

我对SQL Server中唯一键和主键以及唯一键约束和主键约束之间的区别感到困惑。

我可以在表格中定义多个主键吗?

同样,我没有得到如何在我的表中设置唯一键以及它的实际用途。第二件事,我在互联网上找到了这样的声明

  

PRIMARY KEY约束自动具有UNIQUE约束   在它上面定义。

     

请注意,每个表可以有多个UNIQUE约束,但只有一个   每个表的PRIMARY KEY约束。

这是否意味着当我创建主键时,它会自动定义唯一键,即我只能在其中插入1个空值?

3 个答案:

答案 0 :(得分:4)

您的主键始终是唯一的。您可以添加其他密钥,可能也可能不是唯一的。如果我没有错,主键将决定记录实际存储在磁盘上的方式。

答案 1 :(得分:3)

表上不能有多个主键,但是您可以在表上拥有尽可能多的(在合理的技术限制范围内)唯一约束。

主键不能包含空值,唯一约束确实允许空值发生,但在这种情况下将NULL视为值(因此对于单个列约束,只能出现一个空值)。

主键和唯一约束都可以是外键约束的引用键。


许多关系纯粹主义者认为在SQL中引入“主键”是一个错误 - 没有任何理由选择一个键比任何其他键“更好” - 如果表中有真正的多个键。您可以完全放弃主键并仅使用UNIQUE约束,并平等对待所有键。

答案 2 :(得分:1)

确定:

  • 您可以为每个表设置一个主键
  • 主键定义为唯一,并且不允许NULL

另一方面:

  • 您可以根据需要定义多个唯一索引

主键是一件非常特别的事情 - 它定义了清晰唯一地标识每一行的方法。因此必须是唯一的,并且不能为NULL。

唯一索引就是这样 - 一种确保某些东西(一列,几列toegther)是唯一的机制。您可以在表格上拥有多个约束。

每个唯一索引可能是您的主键 - 它是所谓的候选键。但是只有其中一个可以被挑选并选择实际上是你的主键。