我正在使用mysql数据库。我在主键和唯一键之间有混淆。
请帮助我应该在哪里创建主键和唯一键。我的意思是在哪种情况下我们创建唯一键或主键。
PRIMARY KEY = UNIQUE KEY + Not Null CONSTRAINT
首要的关键:
一张表只能有一个主键约束
在某些 DBMS 中它不能为 NULL - 例如 MySQL 添加 NOT NULL
主键是记录的唯一键标识符
唯一键:
一张表中可以有多个唯一键
唯一键可以有 NULL 值
它可以是候选键
唯一键可以为 NULL ;多行可以有 NULL 值,因此可能不被认为是“唯一的”
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
[table_name]_pkey
)(我听说这被称为代理键)。资料来源:postgresqltutorial.com/postgresql-primary-key我对这一切都很陌生,所以我希望能有一个知识渊博的海报指出我错过的细微差别。
对于一个组织或一个企业来说,有如此多的物理实体(如人、资源、机器等)和虚拟实体(它们的任务、事务、活动)。通常,业务需要记录和处理这些业务实体的信息。这些业务实体在整个业务领域内由一个 Key 标识。
根据 RDBMS 的预期,键(又名候选键)是唯一标识实体的一个值或一组值。
对于 DB-Table,存在很多键并且可能符合主键的条件。这样所有的键、主键、唯一键等统称为候选键。但是,DBA 从候选键中选择一个键来搜索记录,称为主键。
主键和唯一键的区别
1. 行为:主键用于标识表中的行(记录),而唯一键用于防止列中的重复值(空条目除外)。
2. 索引:默认情况下,如果主键不存在,SQL 引擎会在主键上创建聚集索引,在唯一键上创建非聚集索引。
3. Nullability:主键不包含Null值,而Unique-key可以。
4.存在性:一张表最多可以有一个主键,但可以有多个Unique-key。
5. 可修改性:您不能更改或删除主值,但唯一键值可以。
有关更多信息和示例:
主键和唯一键的区别 +------------------------------------------+ ---------------------------------------------------------------+ |主键 |唯一键 | +------------------------------------------+-------- ----------------------------------------------------+ |主键不能接受空值。 |唯一键只能接受一个空值。 | +------------------------------------------+-------- ----------------------------------------------------+ |默认情况下,主键是聚集的 |默认情况下,唯一键是唯一的 | |数据库表中的索引和数据是|非聚集索引。 | |物理组织的顺序| | |聚集索引。 | | +------------------------------------------+-------- ----------------------------------------------------+ |我们在 | 中只能有一个主键我们可以在一个 | 中拥有多个唯一键。 |桌子。 |桌子。 | +------------------------------------------+-------- ----------------------------------------------------+ |主键可以做外键|在 SQL Server 中,可以将唯一键设为外键 | |到另一张桌子。 |键入另一个表。 | +------------------------------------------+-------- ----------------------------------------------------+
主键具有标识数据库行的语义。因此,给定表只能有一个主键,而可以有多个唯一键。
同样出于同样的原因,主键不能为 NULL(至少在 Oracle 中,不确定其他数据库)
因为它标识了它永远不应该改变的行。更改主键必然会造成严重的痛苦,甚至可能是永恒的诅咒。
因此,在大多数情况下,您需要一些人为的主键 id,除了识别表中的单行之外,它不用于任何用途。
另一方面,唯一键可以根据需要更改。
主键是唯一键。
每个表必须最多一个主键,但它可以有多个唯一键。主键用于唯一标识表行。主键不能是 NULL
,因为 NULL
不是值。
认为表名是employee。
首要的关键
主键不能接受空值。主键强制列的唯一性。一张表中只能有一个主键。
唯一键
唯一键可以接受空值。唯一键还强制列的唯一性。您可以认为如果唯一键包含空值,那么为什么它可以是唯一的?是的,虽然它可以接受空值,但它强制列的唯一性。看看图片。这里 Emp_ID 是主要的,公民 ID 是唯一的。希望你能理解。我们可以在一个表中使用多个唯一键。
我知道这个问题已经有好几年了,但我想提供一个答案来解释为什么而不是如何
主键的目的:唯一标识数据库中的一行 => 一行表示由表建模的实体类型的单个实例。主键强制实体的完整性,AKA 实体完整性。主键将是一个聚集索引,即它定义了数据物理存储在表中的顺序。
唯一键的目的:好的,使用主键我们可以唯一地标识一行。但我有一个业务需求,另一列/一组列应该具有唯一值。好吧,从技术上讲,鉴于此列是唯一的,它可以成为强制实体完整性的候选者。但据我们所知,此列可能包含来自外部组织的数据,我可能怀疑这些数据是否独一无二。我可能不相信它可以提供实体完整性。我只是让它成为满足我的业务需求的唯一关键。
给你!
如果您的数据库设计不需要外键,那么您可以使用唯一键(但请记住唯一键允许单个空值)。
如果您的数据库需要外键,那么您别无选择,您必须使用主键。
要查看唯一键和主键之间的区别,请访问 here
唯一键:- 当您必须提供唯一值时应该使用它。在唯一键的情况下,这意味着也允许空值。唯一键是那些在该列中唯一且不相似的键,例如您的宠物名字.它可以与 null 完全不同,如果您在数据库上下文中询问,则必须注意每个 null 都与数据库中的另一个 null 不同。除了 null=null 为 true 的 SQL Server 之外
主键: - 当您必须唯一标识行时应该使用它。主键是数据库约束中每一行的唯一键,它不允许在其中出现空值。所以,您可能已经看到数据库有一列是自动递增的,它是表的主键。另外它可以用作另一个表中的外键。示例可以是订单表中的 orderId,账单表中的 billId。现在回到何时使用它的情况:-
1)列中的主键在表中不能为空,并且您在另一个表中用作外键来创建关系
2) 表中的唯一键,它不会影响表或整个数据库中的唯一键,无论您是否为特定列(如餐厅的零食)取空值,您都可能不在餐厅吃零食
主键和唯一键的区别
Primary key
和 Unique Key
都用于唯一定义表中的行。 Primary Key
创建列的 clustered index
,而 Unique creates an unclustered index of the column
。
A Primary Key
不允许 NULL value
,但 a Unique Key
允许 one NULL value
。
简单地说,主键是唯一的,不能为空,唯一的可以为空,可能不是唯一的。
may not be unique
在这里是什么意思?
主键
主键的主要目的是提供一种识别表中每条记录的方法。
主键提供了一种使用行内数据来标识行的方法。主键可以基于一个或多个列,例如名字和姓氏;但是,在许多设计中,主键是从标识列自动生成的数字。
主键具有以下特征:
一张表只能有一个主键。主键由一列或多列组成。主键强制执行表的实体完整性。定义的所有列都必须定义为 NOT NULL。主键唯一标识一行。默认情况下,主键会生成 CLUSTERED 唯一索引。
唯一键
唯一键也称为唯一约束。唯一约束可用于确保行在数据库中是唯一的。
我们不是已经用主键这样做了吗?是的,我们有,但是一个表可能有几组你想要唯一的列。
在 SQL Server 中,唯一键具有以下特征:
一个表上可以定义多个唯一键。默认情况下,唯一键会产生非集群唯一索引。一列或多列组成一个唯一键。列可能为 NULL,但每列允许有一个 NULL。外键约束可以引用唯一约束。
来源:here
主键的主要特点是:
它必须包含每行数据的唯一值。它不能包含空值。表中只有一个主键。
唯一键的主要特点是:
它还可以包含每行数据的唯一值。
它还可以包含空值。
表中的多个唯一键。