主键和唯一键之间的区别

问题描述 投票:222回答:14

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

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

database primary-key unique-key
14个回答
202
投票

首要的关键:

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

独特的关键:

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

1
投票

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

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

要查看unique和primary key之间的区别,请访问here


0
投票

Simply Primary Key是唯一的,不能为null,unique可以为null,也可以不是唯一的。


0
投票

主键

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

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

主键具有以下特征:

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

独特的钥匙

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

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

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

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

来源:here


0
投票

唯一键: - 当你必须给出唯一值时应该使用它。在唯一键的情况下它也意味着允许空值。独特键是那些在该列中唯一且不相似的键,例如你的宠物名称.it可以不是null,如果你在数据库的上下文中询问,那么必须注意每个null都与数据库中的另一个null不同.EXCEPT-SQL Server,其中null = null为true


主键: - 当你必须给出唯一标识一行时应该使用它.primary是一个键,它对数据库约束中的每一行都是唯一的,它不允许在其中使用null。所以,你可能已经看到了数据库有一个自动递增的列,它是表的主键。加上它可以用作另一个table中的外键.example可以是订单表上的orderId,bill表中的billId。

现在回到使用它的情况: -

1)列中的主键在表中不能为空,并且您在另一个表中用作创建关系的外键

2)表格中的唯一键,它不会影响表格或整个数据库,无论你是否像餐馆里的小吃一样取特定列的空值,你可能不会在餐厅吃零食


0
投票

主键和唯一键之间的区别

Primary keyUnique Key都用于唯一定义表中的行。 Primary Key创造了一个clustered index的列,而Unique creates an unclustered index of the column

A Primary Key不允许NULL value,但a Unique Key确实允许one NULL value


0
投票

主键的主要功能是:

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

Unique键的主要功能包括:

它还可以包含每行数据的唯一值。

它还可以包含空值。

表中的多个唯一键。


73
投票

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

主键(PK):它也是一列或一组列,可以标识一行中的唯一性。

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

默认情况下:

  1. PK创建聚簇索引,UK创建非聚集索引。
  2. PK不为空,但UK允许空值(注意:默认值)
  3. 桌子上只能有一个PK,但可以有多个英国的PK
  4. 您可以根据需要覆盖默认实现。

在决定是创建英国还是PK时,这取决于你的目标。它遵循一个类比,如果“如果有一个由三人组成的团队,那么所有人都是同龄人,但他们中的一个将成为同伴:PK和英国有着相似的关系。”我建议阅读这篇文章:作者给出的例子可能看起来不合适,但试图找到一个整体的想法。

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


40
投票

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

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

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

主键和唯一键之间的区别

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

2.索引:默认情况下,SQL-engine在主键上创建聚簇索引(如果不存在),在Unique-key上创建非聚簇索引。

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

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

5.可修改性:您不能更改或删除主值,但唯一键值可以。

有关更多信息和示例:

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


26
投票

主键必须是唯一的。

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

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


16
投票

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

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

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

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

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


15
投票

Difference between Primary Key and Unique Key

+-----------------------------------------+-----------------------------------------------+
|                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


7
投票

主键是唯一键。

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


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

3
投票

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

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

唯一键的目的:好的,使用主键我们可以唯一地标识一行。但我有一个业务需求,即另一列/一组列应具有唯一值。从技术上讲,鉴于此列是唯一的,它可以成为强制实体完整性的候选者。但是就我们所知,本专栏可以包含来自外部组织的数据,我可能对其独特性存在疑问。我可能不相信它提供实体完整性。我只是将它作为满足我业务需求的独特密钥。

你去!

© www.soinside.com 2019 - 2024. All rights reserved.