ChatGPT解决这个技术问题 Extra ChatGPT

主键和唯一键的区别

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

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

wrt null-ability 区分黑白它们的好方法是 PRIMARY KEY = UNIQUE KEY + Not Null CONSTRAINT

d
danish_wani

首要的关键:

一张表只能有一个主键约束

在某些 DBMS 中它不能为 NULL - 例如 MySQL 添加 NOT NULL

主键是记录的唯一键标识符

唯一键:

一张表中可以有多个唯一键

唯一键可以有 NULL 值

它可以是候选键

唯一键可以为 NULL ;多行可以有 NULL 值,因此可能不被认为是“唯一的”


还想添加可以在多个列上创建的主键,例如主键(CustomerID,ProductID)。这称为复合主键。这是为了澄清第一点,因为它可能被新来的 sql 采用(读取一个键 => 一个列):)
您的“可以成为候选键”是什么意思?
“只允许单个空值” - 这不是真的,至少对于 MySQL 来说不是。
唯一键可以为空,并且可能不是唯一的手段 ??
@PratikCJoshi他可能意味着在其他唯一键上可以是多行,null。
j
jatin_ghataliya

Unique Key (UK):它是一列或一组列,可以标识一行中的唯一性。

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

所以主键只是唯一键的别称,但在 SQL Server 中的默认实现对于主键和唯一键是不同的。

默认:

PK 创建聚集索引,UK 创建非聚集索引。 PK 不为空,但 UK 允许为空(注意:默认情况下)一张表上只能有一个且只有一个 PK,但可以有多个 UK 您可以根据需要覆盖默认实现。

在决定是创建 UK 还是 PK 时,这真的取决于您的目标是什么。打个比方,“如果有三个人的团队,那么他们都是同龄人,但会有一个人是一对同龄人:PK和UK有相似的关系。”。我建议阅读这篇文章:作者给出的例子可能看起来不合适,但尝试获得一个整体的想法。

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


阅读大约 10 个网页,也就是说,PK 可以包含多个列。那么一张桌子上怎么可能只有一个PK呢?
@android 具有多于一列的 PK 就唯一性而言充当一列。至少在 PostgreSQL 中,这意味着向表中添加了一个新列(默认名称为 [table_name]_pkey)(我听说这被称为代理键)。资料来源:postgresqltutorial.com/postgresql-primary-key我对这一切都很陌生,所以我希望能有一个知识渊博的海报指出我错过的细微差别。
好吧,这不是专栏。我看错了。这是一个约束,而不是一个列。仍然有聚集索引,但它超过两列而不是一列。并且其中的每一列本身都不是主键,而是整个集合都是主键。因此,在这些情况下,PK 不会超过一个。
j
jatin_ghataliya

对于一个组织或一个企业来说,有如此多的物理实体(如人、资源、机器等)和虚拟实体(它们的任务、事务、活动)。通常,业务需要记录和处理这些业务实体的信息。这些业务实体在整个业务领域内由一个 Key 标识。

根据 RDBMS 的预期,键(又名候选键)是唯一标识实体的一个值或一组值。

对于 DB-Table,存在很多键并且可能符合主键的条件。这样所有的键、主键、唯一键等统称为候选键。但是,DBA 从候选键中选择一个键来搜索记录,称为主键。

主键和唯一键的区别

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

2. 索引:默认情况下,如果主键不存在,SQL 引擎会在主键上创建聚集索引,在唯一键上创建非聚集索引。

3. Nullability:主键不包含Null值,而Unique-key可以。

4.存在性:一张表最多可以有一个主键,但可以有多个Unique-key。

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

有关更多信息和示例:

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


在第五点,您说我们不能更改或删除主要值。我们肯定可以通过使用更新语句来更改表中的主要值。
@Kapil 这样做超出了使用主键的全部目的。
聚集索引:行以与索引相同的顺序物理存储在磁盘上
O
Oded

主键必须是唯一的。

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

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


O
Omer

主键和唯一键的区别 +------------------------------------------+ ---------------------------------------------------------------+ |主键 |唯一键 | +------------------------------------------+-------- ----------------------------------------------------+ |主键不能接受空值。 |唯一键只能接受一个空值。 | +------------------------------------------+-------- ----------------------------------------------------+ |默认情况下,主键是聚集的 |默认情况下,唯一键是唯一的 | |数据库表中的索引和数据是|非聚集索引。 | |物理组织的顺序| | |聚集索引。 | | +------------------------------------------+-------- ----------------------------------------------------+ |我们在 | 中只能有一个主键我们可以在一个 | 中拥有多个唯一键。 |桌子。 |桌子。 | +------------------------------------------+-------- ----------------------------------------------------+ |主键可以做外键|在 SQL Server 中,可以将唯一键设为外键 | |到另一张桌子。 |键入另一个表。 | +------------------------------------------+-------- ----------------------------------------------------+


J
Jens Schauder

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

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

因为它标识了它永远不应该改变的行。更改主键必然会造成严重的痛苦,甚至可能是永恒的诅咒。

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

另一方面,唯一键可以根据需要更改。


+1 提及永恒诅咒的风险。是时候将神学引入关系数据库理论了。
PK 在 SQL Server 中也不能为 NULL
B
Buhake Sindi

主键是唯一键。

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


M
Mahedi Hasan Durjoy

认为表名是employee。

首要的关键

主键不能接受空值。主键强制列的唯一性。一张表中只能有一个主键。

唯一键

唯一键可以接受空值。唯一键还强制列的唯一性。您可以认为如果唯一键包含空值,那么为什么它可以是唯一的?是的,虽然它可以接受空值,但它强制列的唯一性。看看图片。这里 Emp_ID 是主要的,公民 ID 是唯一的。希望你能理解。我们可以在一个表中使用多个唯一键。


我们不能在唯一键中插入多个空值,它也不允许重复。
@mahedi-hasan 唯一键列不应该只有一个 NULL 值吗? Citizen ID NULL 的最后两行怎么来的?我在这里错过了什么吗?
刚刚得到了我上面自己评论的答案。看起来 MySQL 也允许多个 NULL 唯一的,所以看起来 @Mahedi_Hasan 使用了 MySQL。 stackoverflow.com/questions/3712222/…
是的..你明白了,我想
M
Manuri Perera

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

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

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

给你!


u
user2903536

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

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

要查看唯一键和主键之间的区别,请访问 here


可以从外键引用唯一约束。主键不是强制性的。
a
ayushs27

唯一键:- 当您必须提供唯一值时应该使用它。在唯一键的情况下,这意味着也允许空值。唯一键是那些在该列中唯一且不相似的键,例如您的宠物名字.它可以与 null 完全不同,如果您在数据库上下文中询问,则必须注意每个 null 都与数据库中的另一个 null 不同。除了 null=null 为 true 的 SQL Server 之外

主键: - 当您必须唯一标识行时应该使用它。主键是数据库约束中每一行的唯一键,它不允许在其中出现空值。所以,您可能已经看到数据库有一列是自动递增的,它是表的主键。另外它可以用作另一个表中的外键。示例可以是订单表中的 orderId,账单表中的 billId。现在回到何时使用它的情况:-

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

2) 表中的唯一键,它不会影响表或整个数据库中的唯一键,无论您是否为特定列(如餐厅的零食)取空值,您都可能不在餐厅吃零食


G
Gufran Hasan

主键和唯一键的区别

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


M
Mohammed F. Ghazo

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


“唯一可以为空,并且可能不是唯一的”。 may not be unique 在这里是什么意思?
M
Manish Vadher

主键

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

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

主键具有以下特征:

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

唯一键

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

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

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

一个表上可以定义多个唯一键。默认情况下,唯一键会产生非集群唯一索引。一列或多列组成一个唯一键。列可能为 NULL,但每列允许有一个 NULL。外键约束可以引用唯一约束。

来源:here


N
Nischal Tyagi

主键的主要特点是:

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

唯一键的主要特点是:

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

它还可以包含空值。

表中的多个唯一键。