主键和唯一键之间的区别

时间:2012-03-05 11:39:54

标签: database primary-key unique-key

我正在使用mysql数据库。我在主键和唯一键之间存在混淆。

请帮助我在哪里创建主键和唯一键。我的意思是在哪种情况下我们会创建唯一的密钥或主键。

15 个答案:

答案 0 :(得分:198)

主键:

  • 表格中只能有一个主键
  • 在某些DBMS中,它不能是NULL - 例如MySQL添加了NOT NULL
  • 主键是记录的唯一键标识符

唯一键:

  • 一张表中可以有多个唯一键
  • 唯一键可以包含NULL
  • 它可以是候选键
  • 唯一键可以是NULL;多行可以有NULL个值,因此可能不会被视为“唯一”

答案 1 :(得分:72)

唯一键(英国):它是一列或一组列,可以识别行中的唯一性。

主键(PK)一列或一组列,可以识别行中的唯一性。

因此,主键只是唯一键的另一个名称,但SQL Server中的默认实现对于主键和唯一键是不同的。

默认:

  1. PK创建一个Clustered索引,UK创建一个Non Clustered Index。
  2. PK不为空,但UK允许空值(注意:默认情况下)
  3. 桌子上只能有一个PK,但可以有多个英国的
  4. 您可以根据需要覆盖默认实现。
  5. 在决定是创建英国还是PK时,这取决于你的目标。它遵循类似的类比 “如果有一个由三人组成的团队,那么所有人都是同龄人,但其中一人将成为同伴:PK和英国有着相似的关系。”我建议阅读这篇文章:作者给出的例子可能看起来不合适,但试图找到一个整体的想法。

    http://tsqltips.blogspot.com/2012/06/difference-between-unique-key-and.html

答案 2 :(得分:40)

对于组织或企业,有如此多的物理实体(例如人员,资源,机器等)和虚拟实体(他们的任务,交易,活动)。 通常,业务需要记录和处理这些业务实体的信息。 这些业务实体通过密钥在整个业务域中标识。

根据RDBMS预期,Key(a.k.a Candidate Key)是唯一标识实体的值或值集。

对于数据库表,存在许多密钥,并且可能符合主键的条件。 因此,所有密钥,主密钥,唯一密钥等统称为候选密钥。 但是,DBA从候选键中选择一个用于搜索记录的键称为主键。

主键和唯一键之间的区别

<强> 1。行为:主键用于标识表中的行(记录),而唯一键用于防止列中的重复值(空条目除外)。

<强> 2。索引:默认情况下,SQL-engine会在主键上创建聚簇索引(如果不存在),并在唯一键上创建非聚簇索引。

第3。可为空性:主键不包含空值,而唯一键可以。

<强> 4。存在:一个表最多只能有一个主键,但可以有多个唯一键。

<强> 5。可修改性:您无法更改或删除主要值,但可以使用唯一键值。

有关更多信息和示例:

http://dotnetauthorities.blogspot.in/2013/11/Microsoft-SQL-Server-Training-Online-Learning-Classes-Integrity-Constraints-PrimaryKey-Unique-Key_27.html

答案 3 :(得分:26)

主键必须是唯一的。

唯一键不一定是主键 - 请参阅candidate key

也就是说,表上可能有多个列组合可以唯一标识一行 - 只能选择其中一个作为主键。其他人虽然是唯一的候选钥匙。

答案 4 :(得分:16)

主键具有标识数据库行的语义。因此,给定表只能有一个主键,而可以有许多唯一键。

同样出于同样的原因,主键不能为NULL(至少在Oracle中,不确定其他数据库)

因为它标识了行,所以它永远不会改变。改变主键必然会造成严重的痛苦并可能导致永久的诅咒。

因此,在大多数情况下,您需要一些主键的人工ID,除了识别表中的单行外,它不用于任何内容。

另一方面,唯一键可能会根据需要进行更改。

答案 5 :(得分:14)

  

主键和唯一键之间的区别

+-----------------------------------------+-----------------------------------------------+
|                Primary Key              |                    Unique Key                 |
+-----------------------------------------+-----------------------------------------------+
| Primary Key can't accept null values.   | Unique key can accept only one null value.    |
+-----------------------------------------+-----------------------------------------------+
| By default, Primary key is clustered    | By default, Unique key is a unique            |
| index and data in the database table is | non-clustered index.                          |
| physically organized in the sequence of |                                               |
| clustered index.                        |                                               |
+-----------------------------------------+-----------------------------------------------+
| We can have only one Primary key in a   | We can have more than one unique key in a     |
| table.                                  | table.                                        |
+-----------------------------------------+-----------------------------------------------+
| Primary key can be made foreign key     | In SQL Server, Unique key can be made foreign |
| into another table.                     | key into another table.                       |
+-----------------------------------------+-----------------------------------------------+

您可以从以下网址找到详细信息:
http://www.dotnet-tricks.com/Tutorial/sqlserver/V2bS260912-Difference-between-Primary-Key-and-Unique-Key.html

答案 6 :(得分:7)

主键是唯一键。

每个表必须具有最多一个主键,但它可以有多个唯一键。主键用于唯一标识表行。主键不能是NULL,因为NULL不是值。

答案 7 :(得分:6)

  • 认为表名是雇员。
  • 主键
  • 主键不能接受空值。主键强制执行a的唯一性 柱。我们表中只能有一个主键。
  • 唯一键
  • 唯一键可以接受空值。唯一键还强制执行列的唯一性。您可以认为唯一键是否包含空值,那么为什么它可以是唯一的?是的,虽然它可以接受空值,但它强制实现列的唯一性。只需查看图片。其中Emp_ID是主要的,Citizen ID是唯一的。希望你能理解。我们可以在表中使用多个唯一键。 enter image description here

答案 8 :(得分:3)

我知道这个问题已经有好几年了,但我想提供一个答案来解释为什么而不是如何

主键的用途:要唯一地标识数据库中的行=>行代表由表建模的实体类型的单个实例。主键可增强实体的完整性,即AKA实体完整性。主键是聚簇索引,即它定义了数据在表中的物理存储顺序。

唯一键的用途:好的,使用主键,我们可以唯一地标识一行。但是我有一个业务需求,使得另一列/一组列应该具有唯一值。好吧,从技术上讲,鉴于此列是唯一的,因此可以作为强制实体完整性的候选者。但是据我们所知,此列可能包含来自外部组织的数据,我可能会对它的独特性有所怀疑。我可能不信任它提供实体完整性。我只是将它作为满足我的业务需求的唯一钥匙。

你去了!

答案 9 :(得分:1)

如果您的数据库设计不需要外键,那么您可以使用Unique键(但请记住唯一键允许单个空值)。

如果您的数据库需要外键,那么您无需选择就可以使用主键。

要查看唯一密钥和主密钥访问here

之间的区别

答案 10 :(得分:0)

简单主键是唯一的,不能为空,唯一可以为空,可能不是唯一的。

答案 11 :(得分:0)

  

唯一键:-                  当您必须赋予独特的价值时应使用它。                  唯一键,这意味着也允许使用空值。                  该列中唯一且不相似的键,例如                  您的宠物名。它不能像null,如果您在数据库上下文中询问,则必须注意,每个null与数据库中的另一个null都不相同。 EXCEPT-SQL Server,其中null = null为true < / strong>


  

主键:-                  当您必须唯一标识一行时应使用它.primary是关键,对于数据库约束中的每一行唯一的是它不允许其中包含null。因此,您可能已经看到数据库中有一个列是自动增量,它是表的主键。加上它可以用作另一个表中的外键。示例可以是订单表上的 orderId ,账单表中的 billId

     

现在回到使用它的时候了:-

1) 该列中的主键  在表中不能为null,并且您在另一个表中用作外键 用于建立关系的表格

2)表中的唯一键  不会影响表或整个数据库  对于餐厅中的小吃等特定列,它为null  可能您不在餐厅吃零食

答案 12 :(得分:0)

主键

主键的主要目的是提供一种识别表中每个记录的方法。

主键提供了一种使用行中的数据标识行的方法。主键可以基于一个或多个列,例如名和姓;但是,在许多设计中,主键是从标识列自动生成的数字。

主键具有以下特征:

  1. 一个表只能有一个主键。
  2. 主键由一个或多个列组成。
  3. 主键可增强表的实体完整性。
  4. 所有定义的列都必须定义为NOT NULL。
  5. 主键唯一地标识一行。
  6. 默认情况下,主键会导致聚集的唯一索引。

唯一键

唯一键也称为唯一约束。可以使用唯一性约束来确保行在数据库中是唯一的。

我们不是已经用主键做到了吗?是的,是的,但是一个表可能有几组您想要唯一的列。

在SQL Server中,唯一键具有以下特征:

  1. 一个表上可以定义多个唯一键。
  2. 默认情况下,唯一键会导致NONCLUSTERED唯一索引。
  3. 一个或多个列组成一个唯一键。
  4. 列可以为NULL,但每列允许一个NULL。
  5. 外键约束可以引用唯一约束。

源:here

答案 13 :(得分:0)

主键和唯一键之间的差异

Primary keyUnique Key均用于唯一定义表中的一行。 JavascriptExecutor JS=(JavascriptExecutor)driver; JS.executeScript("document.getEementByXpath('//a[@id='btnChangeStatusThisOrder']).click()'", button); 创建列的clustered index,而Primary Key

Unique creates an unclustered index of the column不允许A Primary Key,但是NULL value允许a Unique Key

答案 14 :(得分:0)

主键的主要功能是:

每行数据必须包含唯一值。 它不能包含空值。 表中只有一个主键。

唯一键的主要功能是:

对于每行数据,它还可以包含唯一值。

它也可以包含空值。

表中有多个唯一键。