提问



我使用的是mysql数据库。主键和唯一键之间存在混淆。


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

最佳参考


主键:



  • 表格中只能有一个主键

  • 在某些DBMS中,它不能是NULL - 例如MySQL添加了NOT NULL

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



唯一键:



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

  • 唯一键可以包含NULL

  • 它可以是候选键

  • 唯一键可以是NULL,也可能不是唯一的


其它参考1


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


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


因此,主键只是唯一键的另一个名称,但SQL Server中的默认实现对于主键和唯一键是不同的。


默认情况下:



  1. PK创建一个Clustered索引,UK创建一个Non Clustered Index。

  2. PK不为空,但UK允许空值(注意:默认情况下)

  3. 桌子上只能有一个PK,但可以有多个英国的

  4. 您可以根据需要覆盖默认实现。



在决定是创建英国还是PK时,这取决于你的目标。它遵循类似的类比
如果有一个由三人组成的团队,那么所有人都是同龄人,但他们中的一个将成为同龄人:PK和英国有着相似的关系。我建议阅读这篇文章:作者给出的例子似乎不合适,但试着找到一个整体的想法。


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

其它参考2


对于组织或企业,有如此多的物理实体(例如人员,资源,机器等)和虚拟实体(他们的任务,交易,Activity)。
通常,业务需要记录和处理这些业务实体的信息。
这些业务实体通过密钥在整个业务域中标识。


根据RDBMS预期,Key(a.k.a Candidate Key)是唯一标识实体的值或值集。


对于DB-Table,存在许多密钥,并且可能符合主键的条件。
因此,所有密钥,主密钥,唯一密钥等统称为候选密钥。
但是,DBA从候选键中选择一个用于搜索记录的键称为主键。


主键和唯一键之间的区别


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


2。索引:默认情况下,SQL-engine在主键上创建聚簇索引(如果不存在),在Unique-key上创建非聚簇索引。


第3。可为空性:主键不包含空值,而唯一键可以包含空值。


4。存在:一个表最多只能有一个主键,但可以有多个唯一键。


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


有关更多信息和示例:


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

其它参考3


主键必须是唯一的。


唯一键不必是主键 - 请参阅候选键。[12]


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

其它参考4


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


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


因为它标识了行,所以它永远不会改变。改变主键必然会造成严重的痛苦并可能导致永久的诅咒。


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


另一方面,唯一键可能会根据需要进行更改。

其它参考5


主键和主键之间的区别唯一键



[13]


您可以从以下网址找到详细信息
http://www.dotnet-tricks.com/Tutorial/sqlserver/V2bS260912-Difference-between-Primary-Key-and-Unique-Key.html[14]

其它参考6


主键是唯一键。


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

其它参考7



  • 认为表名是雇员。

  • 主键

  • 主键不能接受空值。主键强制执行a的唯一性
    柱。我们表中只能有一个主键。

  • 唯一键

  • 唯一键可以接受空值。唯一键还强制执行列的唯一性。您可以认为唯一键是否包含空值,那么为什么它可以是唯一的?是的,虽然它可以接受空值,但它强制执行列的唯一性。只需查看图片。其中Emp_ID是主要的,Citizen ID是唯一的。希望你能理解。我们可以在表中使用多个唯一键。


其它参考8


主键和唯一键都用于强制列的唯一性。那么,你什么时候选择一个呢? [15]


一个表只能有一个主键。如果要在2列或更多列上强制实施唯一性,那么我们使用唯一键约束。


主键约束与唯一键约束之间的区别?


1。一个表只能有一个主键,但只能有一个以上的唯一键


2。主键不允许null值,而唯一键允许一个null


Alter Table Table_Name
Add Constraint Constraint_Name Unique/Primary Key(Column_Name)

其它参考9


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


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


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

其它参考10


Simply Primary Key是一个唯一的,不能为null,唯一可以为null,可能不是唯一的。

其它参考11


主键



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


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


主键具有以下特征:



  1. 表格只能有一个主键。

  2. 主键由一列或多列组成。

  3. 主键强制执行表的实体完整性。

  4. 定义的所有列必须定义为NOT NULL。

  5. 主键唯一标识一行。

  6. 默认情况下,主键会生成CLUSTERED唯一索引。



唯一键



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


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


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



  1. 表上可以定义多个唯一键。

  2. 默认情况下,唯一键会生成NONCLUSTERED唯一索引。

  3. 一列或多列构成唯一键。

  4. 列可以为NULL,但允许每列一个NULL。

  5. 外键约束可以引用唯一约束。



来源:这里[17]

其它参考12



  独特的关键: -
                 当你必须给出唯一的价值时应该使用它。在这种情况下
                 唯一键它意味着也允许空值。独特的键是那些
                 例如,在该列中唯一且不相似的键
                 你的宠物名称。它可以不是null,如果你在数据库的上下文中询问,那么必须注意每个null都与数据库中的另一个null不同。 EXCEPT-SQL Server其中null=null为真







  首要的关键 :-
                 当你必须给出唯一标识一行时,应该使用它.primary是一个关键,它对于数据库约束中的每一行都是唯一的,它不允许在其中使用null。所以,你可能已经看到数据库有一个列是自动增量,它是表的主键。再加上它可以用作另一个表中的外键。示例可以是 orderId在订单表 billId在账单表中即可。

  
  现在回到使用它的情况: -



1) 列中的主键可以
 在表中不是null,而在另一个表中使用外键
用于创建关系的表



2)表中的唯一键
 不会影响表格或整个数据库是否采取
 对于特定列而言,它就像餐馆里的小吃一样
 可能你不会在餐馆吃零食