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