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

时间:2016-05-23 10:06:27

标签: sql primary-key unique-constraint

我回答说表只有一个主键但可能有许多独特的约束。 还有什么呢?

4 个答案:

答案 0 :(得分:2)

我能想到的一些差异:

  1. 主键不能为空,而唯一将允许一个空值。
  2. 您可以在表上拥有多个唯一键,但只能有一个主键。
  3. 一些来自WikiPedia - Unique key - Differences from primary key constraints

    主键约束

    1. 主键不能允许null(不能在允许空值的列上定义主键)。
    2. 每个表不能有多个主键。
    3. 在某些RDBMS上,主键默认生成聚簇索引。
    4. 唯一约束

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

答案 1 :(得分:1)

主列永远不能为空,唯一列可以是。

答案 2 :(得分:0)

很难说采访者可能在寻找什么。有很多选择。

在标准SQL中,声明为primary key的约束和声明为not null unique的约束在逻辑级处理相同的。例如,这两者都可以是外键引用的目标。面试官可能想知道null如何适应这种情况。裸unique约束允许空值;主键约束隐式声明T-SQL中的每一列not null

或者面试官可能一直在寻找您是否将独特的约束与唯一的索引区分开来。 AFAIK,每个dbms通过使用唯一索引实现唯一约束。但是约束在逻辑层面上表达了关于数据库的一些内容,并且唯一索引在物理层面上表达了关于数据库的一些内容。

特别是SQL Server

面试官可能想知道您是否知道某些计算列,但不是所有计算列都可以编入索引。 (那是一个很长的镜头。)

也许面试官想看看你是否对群集说了些什么。 SQL Server中的主键约束默认为clustered,但索引默认为nonclustered

也许面试官想知道你是否对权限说了些什么。您通常需要更广泛的权限来添加约束,而不是添加索引。

答案 3 :(得分:0)

UNIQUE约束主键之间的区别在于每个表可能只有一个主键,但您可以定义多个UNIQUE约束。主键约束为 不可为空 。 UNIQUE约束可以是 nullable 。 创建UNIQUE约束时,数据库会自动创建UNIQUE索引。对于MS SQL Server数据库,PRIMARY KEY将生成唯一的CLUSTERED INDEX。 UNIQUE约束将生成唯一的非聚集索引。