主键和唯一约束之间的主要区别是什么?

3

我回答说表格只有一个主键,但可以有多个唯一约束条件。还有什么需要补充吗?


4
主键列(pk column)永远不能为空,而唯一列(unique column)可以为空。 - jarlh
1
https://dev59.com/3Gkw5IYBdhLWcg3w6esb - sandeep rawat
3个回答

6
主键列永远不能为 null,而唯一约束列可以为 null。

3

以下是我能想到的一些差异:

  1. 主键不允许为空,而唯一键会允许一个空值。
  2. 您可以在表上拥有多个唯一键,但只能有一个主键。

以下摘自维基百科-唯一键-与主键约束的区别:

主键约束

  1. 主键不能允许为空(不能在允许为空的列上定义主键)。
  2. 每个表不能有多个主键。
  3. 在某些RDBMS上,主键默认生成聚集索引。

唯一约束

  1. 可以在允许为空的列上定义唯一约束。
  2. 每个表可以有多个唯一键。
  3. 在某些RDBMS上,唯一键默认生成非聚集索引。

1
希望你不介意修复。对我来说,这是正确的答案 :)!谢谢! - ivanleoncz

0

很难说面试官可能在寻找什么。有很多选择。

在标准 SQL 中,声明为 primary key 的约束和声明为 not null unique 的约束在逻辑层面上的行为是相同的。例如,这两个都可以成为外键引用的目标。面试官可能想知道关于 null 如何适用于此。一个裸的 unique 约束允许空值;在 T-SQL 中,主键约束隐式地声明每个列为 not null

或者面试官可能想看看你是否区分了唯一的 约束 和唯一的 索引。据我所知,每个 DBMS 都通过使用唯一索引来实现唯一约束。但约束表达了关于数据库的逻辑层面的内容,而唯一索引则表达了关于数据库的物理层面的内容。

特别是 SQL Server

面试官可能想看看你是否知道一些计算列(但不是所有计算列)可以被索引。 (这是一个小概率事件。)

也许面试官想知道你是否会谈到集群。在SQL Server中,主键约束默认为clustered,而索引默认为nonclustered
也许面试官想知道你是否会谈到权限。通常,添加约束需要更广泛的权限,而添加索引所需的权限则较少。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接