主键(Primary Key):
NULL
- 例如,MySQL会添加NOT NULL
唯一键(Unique Key):
NULL
值NULL
;多行可以有相同的NULL
值,因此可能不被认为是“唯一”的。唯一键(UK):它是一列或一组列,可以在行中标识出唯一性。
主键(PK):它也是一列或一组列,可以在行中标识出唯一性。
因此,主键只是唯一键的另一个名称,但在SQL Server中的默认实现对主键和唯一键有所不同。
默认情况下:
决定创建UK还是PK真的取决于您的目的。它遵循一个类比:“如果有一个由三个人组成的团队,那么他们都是同级别的,但其中会有一个人是同辈中的一对:PK和UK有类似的关系。”我建议阅读这篇文章:http://tsqltips.blogspot.com/2012/06/difference-between-unique-key-and.html。作者给出的例子可能不太适合,但请尽量了解整体思路。
对于一个组织或企业而言,存在许多物理实体(如人员、资源、机器等)和虚拟实体(它们的任务、交易、活动等)。通常,业务需要记录和处理这些业务实体的信息。这些业务实体通过一个键在整个业务域内进行标识。
根据关系型数据库管理系统(RDBMS)的角度来看,键(也称为候选键)是唯一标识实体的一个值或一组值。
对于一个数据库表,存在许多键并且可能符合主键的条件。因此,所有键,包括主键、唯一键等,统称为候选键。然而,数据库管理员从候选键中选择一个用于搜索记录的键称为主键。
主键与唯一键的区别:
1. 行为:主键用于标识表中的一行(记录),而唯一键用于防止列中出现重复值(除了空条目)。
2. 索引:默认情况下,如果不存在,则SQL引擎在主键上创建聚集索引,而在唯一键上创建非聚集索引。
3. 可空性:主键不包括空值,而唯一键可以包括。
4. 存在性:一张表最多只能有一个主键,但可以有多个唯一键。
5. 可修改性:无法更改或删除主键值,但可以更改唯一键值。
更多信息和示例请参考:
主键 | 唯一键 |
---|---|
主键不能接受NULL 值 |
唯一键可以接受NULL 值,因此在唯一性方面存在问题 |
主键不能包含重复的值 | 唯一键也不能包含重复的值 |
一个表只能有一个主键 | 一个表可以有多个唯一键 |
我们可以从一个或多个表字段创建主键 | 我们也可以从一个或多个表字段创建唯一键 |
默认情况下,主键创建一个聚集索引 | 默认情况下,唯一键创建一个非聚集唯一索引 |
主键用于标识表中的每条记录 | 它防止在列中存储重复的条目 |
主键具有标识数据库行的语义。因此,对于给定的表,只能有一个主键,而可以有许多唯一键。
同样基于这个原因,在Oracle中,主键不能为NULL(其他数据库不确定)。
由于它标识行,因此它永远不应该改变。更改主键将导致严重痛苦和可能是永恒的刑罚。
因此,在大多数情况下,您需要一些人工 ID 用作主键,该 ID 仅用于标识表中的单个行。
另一方面,唯一键可以随意更改。
主键是一种唯一的键。
每个表最多只能有一个主键,但可以有多个唯一键。主键用于唯一标识表中的行。主键不能为NULL
,因为NULL
不是一个值。
唯一键:
当您需要提供唯一值时,应使用它。在唯一键的情况下,它表示空值也是允许的。唯一键是那些在该列中唯一且不相似的键,例如您的宠物名字。它可能什么都没有,比如null,如果您是在数据库的上下文中提问,那么必须注意每个null在数据库中都不同。除了SQL Server,其中null=null为真
主键 = 唯一键 + 非空约束(Not Null CONSTRAINT)
- KNU