【问题标题】:SQL - Unique Key, Primary Key & Foreign KeySQL - 唯一键、主键和外键
【发布时间】:2015-04-25 09:27:26
【问题描述】:

Unique Key、Primary KeyForeign KeySQL的概念上有什么区别?

它们有什么不同?

【问题讨论】:

  • 任何初学者的数据库书籍都会教您这一点......或者只是在线搜索初学者的数据库设计教程 - 必须找到 gazillions 的点击量。 ...
  • 我刚刚通过在 Google 搜索中粘贴主题文本获得了 128K 的点击率。
  • 我刚刚在谷歌搜索中得到了这个页面的引用,所以为什么不在这里回答呢?
  • @Jaipal 好问题...!

标签: sql foreign-keys primary-key rdbms unique-key


【解决方案1】:

PRIMARY Key 和 UNIQUE Key 约束都是相似的,它提供了定义它们的列的唯一强制唯一性。

主键

  • 主键不能有 NULL 值。
  • 每个表只能有一个主键。
  • 默认情况下,主键是聚集索引,数据库表中的数据在物理上是按照聚集索引的顺序组织的。
  • 主键可以作为外键与另一个表关联。
  • 我们可以在自动增量字段的帮助下自动生成 ID。主键支持自增值。

唯一键

  • 唯一约束可能有一个 NULL 值。
  • 每个表可以有多个唯一约束。
  • 默认情况下,唯一键是唯一的非聚集索引。
  • 唯一约束不能作为外键与另一个表关联。
  • 唯一约束不支持自动增量值。

外键

  • 外键是表中的字段,是另一个表中的主键。
  • 外键可以接受多个空值。
  • 外键不会自动创建索引,集群或非集群。您可以手动在外键上创建索引。
  • 我们可以在一个表中拥有多个外键。
  • 通过聚集索引支持外键确实有好处,但每个表只能获得一个外键。有什么好处?如果您选择父记录和所有子记录,您希望子记录彼此相邻。使用聚集索引很容易做到这一点。
  • 使用空外键通常是个坏主意。在下面的示例中,[dbo].[child] 中的记录被称为“孤立记录”。在执行此操作之前,请三思而后行。

【讨论】:

    【解决方案2】:

    注意:我们使用约束来强制数据完整性

    主键
    1)不能插入空值
    2)一张表有一个主键

    唯一键 1) 一次插入一个空值 2)一个表有多个唯一键 3)您也可以作为候选键参考

    外键 1)维护两个表和多个表之间的关系 注意:没有任何约束,您可以在多个表中获取数据,但您无法逐个获取数据

    【讨论】:

      【解决方案3】:

      关于唯一键

      的说明

      主键-外键关系中的父表通常称为主键表,但在父表中 PK 不是强制性的。父表中的唯一键/约束就足够了。由于 PK 始终是唯一的,因此它通常用作另一个表中的外键。看到这个post

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2012-01-27
        • 1970-01-01
        • 2020-07-07
        • 1970-01-01
        • 1970-01-01
        • 2011-06-18
        • 2017-04-22
        • 2021-04-10
        相关资源
        最近更新 更多