b/w主键和唯一键有什么区别

nec*_*tar 26 primary-key unique-key

我试图在谷歌找到它,但没有给出令人满意的答案.任何人都可以解释这个坚实的差异.

实际上,如果主键用于唯一选择数据,那么Unique键的需求是什么?

我应该何时使用主键以及何时使用唯一键?

Kra*_*ica 36

主键和唯一键用于不同的事情 - 了解它们的用途将帮助您决定何时使用它们.

主键用于标识表中的一行数据.只要您需要引用特定行,就会使用它,例如.在其他表中或通过应用程序代码等.为了识别行,PK的值必须是唯一的.此外,它们不能为空,因为大多数dbms将null视为不等于null(因为null通常表示"未知").一张表只能有一个PK.数据库中的所有表都应该有PK(尽管大多数dbms不强制执行),PK可以跨多个列.

唯一键约束用于确保数据不会在数据库中的两行中重复.允许数据库中的一行为唯一键约束的值具有null.虽然表应该有PK,但它不需要任何其他唯一键.但是,如果满足您的需求,表可以有多个唯一键.与PK一样,唯一键可以跨越多列.

值得一提的是,默认情况下,使用PK的磁盘上有许多dbms索引和物理顺序表.这意味着通过PK查找值比使用行中的其他值更快.但是,通常,您可以根据需要覆盖此行为.

  • 在许多示例中,您看到主键是表中的单个列; 通常是唯一标识行的整数id号(这称为标识列).那很好(而且通常很方便),但PK不会*成为一个列. (4认同)
  • 例如,您可以拥有一个产品表.假设每个产品有多种型号和多种颜色,因此Products表有一个ModelNum列和一个Color列.现在,ModelNum和Color列都没有唯一标识产品,但它们共同确定了产品.在这种情况下,您可以定义包含ModelNum和Color列的主键(这称为"复合主键").当然,标识列PK与复合列PK方法有利有弊......但这是另一个问题. (3认同)
  • 你是什​​么意思``PK可以跨越多列.? (2认同)

nvo*_*gel 11

术语"唯一键"既模糊又同义.在关系模型中,"密钥"表示候选密钥,根据定义,无论如何都是唯一的.主键只是关系中的任何一个候选键.因此,"唯一密钥"意味着与"候选密钥"完全相同,这意味着与"主密钥"完全相同.没有区别.

但是,SQL有一个称为UNIQUE约束的东西,它与SQL PRIMARY KEY约束略有不同 - 两者都强制执行唯一性,但PRIMARY KEY只能在每个表中使用一次.UNIQUE约束也允许空值,而PRIMARY KEY约束则不允许.

因此,可能令人困惑的术语"唯一键"通常用于表示由UNIQUE约束强制执行的键.它甚至可能用于表示对可空列的UNIQUE约束,尽管在我看来这是一个非常可疑的使用该术语,因为包含空值的一组列不能成为候选键,因此使用单词"key"可以为空列不是真的正确,必然会引起混淆.


nay*_*ies 9

在讨论主键和唯一键之间的区别之前,重要的是确定什么是关键,它如何在业务中发挥作用以及如何在SQL/Oracle中实现它等.

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

根据RDBMS预期:密钥(又名候选密钥),唯一标识实体的值或值集.对于Db表,存在许多密钥,并且可能符合主键的条件.因此,所有密钥,主密钥,唯一密钥等统称为候选密钥.

对于表DBA,所选择的候选密钥称为主密钥,其他候选密钥称为辅助密钥.

主键和唯一键之间的区别

1.行为: 主键用于标识表中的行(记录),而唯一键用于防止列中的重复值.

2.索引: 默认情况下,如果主键不存在,则Sql-engine会在主键上创建聚簇索引,在唯一键上会创建非聚簇索引.

3.可为空性:主键不包括Null值,而Unique-key可以.

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

5.可修改性:您不能更改或删除主值,但唯一键值可以.

有关示例的更多信息,请访问:http: //dotnetauthorities.blogspot.in/2013/11/Microsoft-SQL-Server-Training-Online-Learning-Classes-Integrity-Constraints-PrimaryKey-Unique-Key_27.html