主键和唯一键的区别

我使用的是MySQL数据库。

在哪些情况下我应该创建唯一键或主键?

640523 次浏览

主键必须唯一。

唯一键不一定是主键——参见候选关键字

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

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

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

因为它标识了行,所以它永远不应该更改。改变主键一定会造成严重的痛苦,甚至可能是永恒的诅咒。

因此,在大多数情况下,你需要一些人为的id作为主键,它只用于标识表中的单行。

另一方面,唯一键可以随心所欲地更改。

主键是唯一的键。

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

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

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

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

默认情况下:

  1. PK创建聚集索引,UK创建非聚集索引。
  2. PK不为空,但是UK允许为空(注意:默认情况下)
  3. 一张桌子上只能有一个且只有一个PK,但可以有多个UK
  4. 您可以根据需要重写默认实现。
这真的取决于你在决定是创建UK还是PK时的目标是什么 “如果有三个人的团队,那么他们都是同行,但其中会有一个人是一对同行:PK和UK有类似的关系。”我建议阅读这篇文章:作者给出的例子可能看起来不太合适,但试着得到一个整体的想法。< / p >

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

主键:

  • 一个表中只能有一个主键约束
  • 在一些DBMS中,它不能是NULL,例如MySQL添加了NOT NULL
  • 主键是记录的唯一键标识符

独特的关键:

  • 一个表中可以有多个唯一键吗
  • 唯一键可以有NULL
  • 它可以是一个候选密钥
  • 唯一键可以是NULL;多行可以有NULL值,因此可能不会被认为是“惟一”的。
对于一个组织或企业来说,有如此多的物理实体(如人、资源、机器等)和虚拟实体(它们的任务、事务、活动)。 通常,业务需要记录和处理这些业务实体的信息。 这些业务实体在整个业务域中由一个Key标识。< / p >

根据RDBMS的预期,密钥(又名候选密钥)是唯一标识一个实体的一个值或一组值。

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

主键和唯一键的区别

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

2. 索引:默认情况下,sql引擎在主键上创建聚集索引(如果不存在),在唯一键上创建非聚集索引。

3.Nullability:主键不包括空值,而唯一键可以。

一个表最多可以有一个主键,但可以有多个唯一键。

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

更多信息和示例:

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

简单的主键是唯一的,不能为空,唯一的可以为空,也可以不是唯一的。

主键 唯一键
主键不能接受NULL 唯一键可以接受NULL值,因此在唯一的上下文中存在问题
主键不能包含重复的值 唯一键也不能包含重复的值
一个表中只能有一个主键 一个表中可以有多个唯一键
我们可以从一个或多个表字段中创建一个主键 我们还可以从一个或多个表字段中创建一个唯一键
默认情况下,主键创建聚集索引 默认情况下,唯一键创建非聚集的唯一索引
它用于标识表中的每条记录 它可以防止在列中存储重复的项

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

如果数据库需要外键那么你别无选择只能用主键。

要查看唯一键和主键之间的区别,请访问在这里

  • 假设表名是employee。
  • 主键
  • 主键不能接受空值的惟一性 列。一个表中只能有一个主键
  • 唯一键
  • 唯一键可以接受空值。唯一键还强制列的唯一性。你可以想想,如果唯一键包含空值,为什么它可以是唯一的?是的,虽然它可以接受空值,但它强制列的唯一性。看看照片就知道了。这里Emp_ID是主要的,而Citizen ID是唯一的。希望你能理解。我们可以在一个表中使用多个唯一键。 李enter image description here < / >

唯一键:- 当你必须提供独特的价值时,就应该使用它。在这种情况下 唯一键,它意味着空值也被允许。唯一键就是那些 列中唯一且不相似的键,例如 你的爱称。__abc0

,它不能是null,如果你在数据库的上下文中询问,那么必须注意,每个null都不同于数据库中的另一个null

主键:- 它应该在必须唯一标识一行时使用。Primary是一个键,它对数据库约束中的每一行都是唯一的,它不允许它为空。你可能看到数据库中有一个列是自动递增的它是表的主键。另外,它可以在另一个表中用作外键。example可以是ordertable上的orderId在帐单中.

现在回到什么情况下使用它:-

1) <强>列中的主键 在表中不是空,并且在另一个表中用作外键 创建关系

的表

2)表中唯一的键 不影响在表中或在整个数据库中 对于特定列为Null,比如餐馆里的小吃 可能你在餐馆里不带零食

主键

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

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

主键有以下特征:

  1. 一个表只能有一个主键。
  2. 主键由一个或多个列组成。
  3. 主键强制表的实体完整性。
  4. 所有定义的列必须定义为NOT NULL。
  5. 主键唯一地标识一行。
  6. 默认情况下,主键会导致聚集唯一索引。

独特的钥匙

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

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

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

  1. 一个表上可以定义多个唯一键。
  2. 默认情况下,唯一键会导致非聚集的唯一索引。
  3. 一个或多个列组成一个唯一键。
  4. 列可以为NULL,但允许每个列上有一个NULL。
  5. 外键约束可以引用唯一的约束。

来源:在这里

主键和唯一键的区别

Primary keyUnique Key都用于唯一定义表中的一行。 Primary Key创建列的clustered index,而Unique creates an unclustered index of the column. 0创建列的clustered index。< / p >

A Primary Key不允许NULL value,但是a Unique Key允许one NULL value

我知道这个问题是几年前的,但我想为这个解释为什么而不是如何提供一个答案

主键的作用:在数据库中唯一地标识一行=>一行表示由表建模的实体类型的单个实例。主键强制实体的完整性,即实体完整性。主键将是一个聚集索引,即它定义了数据在表中物理存储的顺序。

唯一密钥的用途:好的,有了主键,我们就有了唯一标识一行的方法。但我有业务需求,另一列/一组列应该具有唯一的值。从技术上讲,如果这个列是唯一的,那么它可以作为强制实体完整性的候选列。但据我们所知,这一列可能包含来自外部组织的数据,我可能怀疑这些数据是否是唯一的。我可能不相信它能提供实体完整性。我只是让它成为一个唯一的键来满足我的业务需求。

好了!

主键的主要特征是:

它必须包含每行数据的唯一值。 不能包含空值。

.一个表中只有一个主键

唯一键的主要特征是:

它还可以为每一行数据包含一个惟一的值。

它也可以包含空值。

一个表中有多个唯一键。