主键和唯一键之间的区别

Anu*_*nuj 235 database primary-key unique-key

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

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

小智 214

首要的关键:

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

独特的关键:

  • 一个表中可以有多个唯一键
  • 唯一键可以有NULL
  • 它可以是候选键
  • 唯一键可以是NULL也可以不是唯一的

  • 唯一键可以为null,可能不是唯一的**意味着**?? (67认同)
  • @PratikCJoshi他可能意味着可以是多行,在其他唯一键上为null. (20认同)
  • 还想添加可以在多个列上创建的主键,例如主键(CustomerID,ProductID).这称为复合主键.这是为了澄清第一点,因为它可能需要新的角落(读取一个键=>一列)到sql :) (9认同)
  • “可以是候选键”是什么意思? (2认同)

小智 74

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

主键(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


nay*_*ies 40

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

根据RDBMS预期,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

  • 在第5点,您说我们无法更改或删除主要值.我们肯定可以使用update语句更改表中的主值. (7认同)
  • @Kapil这样做打败了使用主键的全部目的. (3认同)
  • 聚集索引:行以与索引相同的顺序物理存储在磁盘上 (2认同)

Ode*_*ded 26

主键必须是唯一的.

唯一键不必是主键 - 请参阅候选键.

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


Jen*_*der 16

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

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

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

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

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

  • +1提及永恒诅咒的风险.是时候将神学引入关系数据库理论了. (22认同)

Ome*_*r K 16

主键和唯一键之间的区别

+-----------------------------------------+-----------------------------------------------+
|                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.                       |
+-----------------------------------------+-----------------------------------------------+
Run Code Online (Sandbox Code Playgroud)

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


Buh*_*ndi 7

主键是唯一键.

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


Man*_*uri 7

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

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

唯一键的目的:好的,有了主键,我们就有了唯一标识一行的方法。但我有一个业务需求,另一列/一组列应该具有唯一值。好吧,从技术上讲,鉴于此列是唯一的,它可以成为强制执行实体完整性的候选者。但就我们所知,该列可能包含来自外部组织的数据,我可能怀疑其是否独一无二。我可能不相信它提供实体完整性。我只是让它成为满足我的业务需求的唯一键。

你去吧!


Mah*_*joy 6

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