我正在使用mysql数据库。我在主键和唯一键之间存在混淆。
请帮助我在哪里创建主键和唯一键。我的意思是在哪种情况下我们会创建唯一的密钥或主键。
答案 0 :(得分:198)
主键:
NULL
- 例如MySQL添加了NOT NULL
唯一键:
NULL
值NULL
;多行可以有NULL
个值,因此可能不会被视为“唯一”答案 1 :(得分:72)
唯一键(英国):它是一列或一组列,可以识别行中的唯一性。
主键(PK):也一列或一组列,可以识别行中的唯一性。
因此,主键只是唯一键的另一个名称,但SQL Server中的默认实现对于主键和唯一键是不同的。
默认:
在决定是创建英国还是PK时,这取决于你的目标。它遵循类似的类比 “如果有一个由三人组成的团队,那么所有人都是同龄人,但其中一人将成为同伴:PK和英国有着相似的关系。”我建议阅读这篇文章:作者给出的例子可能看起来不合适,但试图找到一个整体的想法。
http://tsqltips.blogspot.com/2012/06/difference-between-unique-key-and.html
答案 2 :(得分:40)
对于组织或企业,有如此多的物理实体(例如人员,资源,机器等)和虚拟实体(他们的任务,交易,活动)。 通常,业务需要记录和处理这些业务实体的信息。 这些业务实体通过密钥在整个业务域中标识。
根据RDBMS预期,Key(a.k.a Candidate Key)是唯一标识实体的值或值集。
对于数据库表,存在许多密钥,并且可能符合主键的条件。 因此,所有密钥,主密钥,唯一密钥等统称为候选密钥。 但是,DBA从候选键中选择一个用于搜索记录的键称为主键。
主键和唯一键之间的区别
<强> 1。行为:主键用于标识表中的行(记录),而唯一键用于防止列中的重复值(空条目除外)。
<强> 2。索引:默认情况下,SQL-engine会在主键上创建聚簇索引(如果不存在),并在唯一键上创建非聚簇索引。
第3。可为空性:主键不包含空值,而唯一键可以。
<强> 4。存在:一个表最多只能有一个主键,但可以有多个唯一键。
<强> 5。可修改性:您无法更改或删除主要值,但可以使用唯一键值。
有关更多信息和示例:
答案 3 :(得分:26)
答案 4 :(得分:16)
主键具有标识数据库行的语义。因此,给定表只能有一个主键,而可以有许多唯一键。
同样出于同样的原因,主键不能为NULL(至少在Oracle中,不确定其他数据库)
因为它标识了行,所以它永远不会改变。改变主键必然会造成严重的痛苦并可能导致永久的诅咒。
因此,在大多数情况下,您需要一些主键的人工ID,除了识别表中的单行外,它不用于任何内容。
另一方面,唯一键可能会根据需要进行更改。
答案 5 :(得分:14)
主键和唯一键之间的区别
+-----------------------------------------+-----------------------------------------------+ | 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
答案 6 :(得分:7)
主键是唯一键。
每个表必须具有最多一个主键,但它可以有多个唯一键。主键用于唯一标识表行。主键不能是NULL
,因为NULL
不是值。
答案 7 :(得分:6)
答案 8 :(得分:3)
我知道这个问题已经有好几年了,但我想提供一个答案来解释为什么而不是如何
主键的用途:要唯一地标识数据库中的行=>行代表由表建模的实体类型的单个实例。主键可增强实体的完整性,即AKA实体完整性。主键是聚簇索引,即它定义了数据在表中的物理存储顺序。
唯一键的用途:好的,使用主键,我们可以唯一地标识一行。但是我有一个业务需求,使得另一列/一组列应该具有唯一值。好吧,从技术上讲,鉴于此列是唯一的,因此可以作为强制实体完整性的候选者。但是据我们所知,此列可能包含来自外部组织的数据,我可能会对它的独特性有所怀疑。我可能不信任它提供实体完整性。我只是将它作为满足我的业务需求的唯一钥匙。
你去了!
答案 9 :(得分:1)
答案 10 :(得分:0)
简单主键是唯一的,不能为空,唯一可以为空,可能不是唯一的。
答案 11 :(得分:0)
唯一键:- 当您必须赋予独特的价值时应使用它。 唯一键,这意味着也允许使用空值。 该列中唯一且不相似的键,例如 您的宠物名。它不能像null,如果您在数据库上下文中询问,则必须注意,每个null与数据库中的另一个null都不相同。 EXCEPT-SQL Server,其中null = null为true < / strong>
主键:- 当您必须唯一标识一行时应使用它.primary是关键,对于数据库约束中的每一行唯一的是它不允许其中包含null。因此,您可能已经看到数据库中有一个列是自动增量,它是表的主键。加上它可以用作另一个表中的外键。示例可以是订单表上的 orderId ,账单表中的 billId 。
现在回到使用它的时候了:-
1) 该列中的主键 在表中不能为null,并且您在另一个表中用作外键 用于建立关系的表格
2)表中的唯一键 不会影响表或整个数据库 对于餐厅中的小吃等特定列,它为null 可能您不在餐厅吃零食
答案 12 :(得分:0)
主键的主要目的是提供一种识别表中每个记录的方法。
主键提供了一种使用行中的数据标识行的方法。主键可以基于一个或多个列,例如名和姓;但是,在许多设计中,主键是从标识列自动生成的数字。
主键具有以下特征:
唯一键也称为唯一约束。可以使用唯一性约束来确保行在数据库中是唯一的。
我们不是已经用主键做到了吗?是的,是的,但是一个表可能有几组您想要唯一的列。
在SQL Server中,唯一键具有以下特征:
源:here
答案 13 :(得分:0)
主键和唯一键之间的差异
Primary key
和Unique Key
均用于唯一定义表中的一行。
JavascriptExecutor JS=(JavascriptExecutor)driver;
JS.executeScript("document.getEementByXpath('//a[@id='btnChangeStatusThisOrder']).click()'", button);
创建列的clustered index
,而Primary Key
。
Unique creates an unclustered index of the column
不允许A Primary Key
,但是NULL value
允许a Unique Key
。
答案 14 :(得分:0)
主键的主要功能是:
每行数据必须包含唯一值。 它不能包含空值。 表中只有一个主键。
唯一键的主要功能是:
对于每行数据,它还可以包含唯一值。
它也可以包含空值。
表中有多个唯一键。