【问题标题】:What are the main differences between a primary key and a unique constraint?主键和唯一约束之间的主要区别是什么?
【发布时间】:2016-09-20 03:55:18
【问题描述】:

我回答说表只有一个主键,但可以有许多唯一约束。 但是还有什么?

【问题讨论】:

标签: sql primary-key unique-constraint


【解决方案1】:

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

【讨论】:

    【解决方案2】:

    我能想到的一些区别:

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

    部分摘自维基百科 - Unique key - Differences from primary key constraints

    主键约束

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

    唯一约束

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

    【讨论】:

    • 我希望你不介意这些问题。对我来说,这是正确的答案:)!谢谢!
    【解决方案3】:

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

    【讨论】:

      【解决方案4】:

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

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

      或者面试官可能一直在查看您是否将唯一的约束与唯一的索引区分开来。 AFAIK,每个 dbms 通过使用唯一索引来实现唯一约束。但是约束在逻辑层面表达了关于数据库的一些信息,而唯一索引在物理层面表达了关于数据库的一些信息。

      特别是 SQL Server

      面试官可能想看看您是否知道某些计算列(但不是全部)可以被索引。 (那是一个远射。)

      也许面试官想看看你是否会谈论集群。在 SQL Server 中,主键约束默认为 clustered,但索引默认为 nonclustered

      也许面试官想看看你是否会谈论权限。您通常需要比添加索引更广泛的权限来添加约束。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-12-22
        • 1970-01-01
        • 1970-01-01
        • 2015-08-22
        • 2015-08-06
        • 2011-03-06
        相关资源
        最近更新 更多