主键和身份有什么区别?

在SQL Server数据库中,主键和标识列有什么区别? 一列可以是一个主键而不是一个缩进。 但是,列不能作为主键而不是主键。

除了差异之外,“PK”和“身份”专栏提供的仅仅是PK列呢?

编辑:哎呀。 正如下面所指出的,现在我已经证实,一列可以是一个身份而不是一个PK。 当我testing这个时,我的列types是一个string,我无法将其设置为一个身份。 说得通。

一列可以肯定是一个身份,而不是一个PK。

身份只是一个自动增长的列。

主键是定义行的唯一列。

这两个经常一起使用,但没有要求这样做。

这个答案更多的是为什么身份和主要关键比他们是什么,因为乔已经回答什么正确的上面。

身份是您SQL控制的一个值。 身份是一个行function。 至less在SQL Server中,它是按顺序递增或递减的。 它不应该被修改,价值的差距应该被忽略。 在将表B链接到表A时,标识值非常有用,因为该值从不重复。 在任何情况下,身份不是聚集索引的最佳select。 如果一个表包含审计数据,那么聚集索引可能会更好地在所发生的date创build,因为它会以较less的工作来回答“今天和四天之前发生的事情”的问题,因为date的logging在数据页面。

主键使得一行中的一列或多列是唯一的。 Primay键是一个列function。 可以在任何表上定义一个主键,但是可以创build模拟主键的多个唯一索引。 对主键进行聚类并不总是正确的select。 考虑一个电话簿。 如果电话簿按主要键(电话号码)分组,则返回“第一街”上的电话号码的查询将非常昂贵。

我关于身份和主要关键的一般规则是:

  1. 始终使用标识列
  2. 在范围查找中使用的一列或多列上创build聚簇索引
  3. 由于聚簇索引被添加到每个其他索引的末尾,所以保持聚簇索引变窄
  4. 创build主键和唯一索引以拒绝重复值
  5. 窄键更好
  6. 为连接中使用的每个列创build一个索引

这些是我的通用规则。

主键(也称为候选键)是具有唯一性和最小性质的任何一组属性。 这意味着关键的一列或多列被限制为唯一的。 换句话说,DBMS将不允许任何两行对这些属性具有相同的一组值。

IDENTITY属性有效地为列创build一个自动递增的默认值。 该列不必是唯一的,所以IDENTITY列不一定是关键。

但是,IDENTITY列通常用作关键字,因此它通常具有唯一性约束,以确保重复项不被允许。

根据反馈进行编辑

一个关键是独一无二的。 这是识别行的一种方法。 行可能没有,一个或几个键。 这些键可能包含一个或多个列。

键是具有唯一约束的索引。 这将它们与非关键指标区分开来。

任何具有多列的索引称为“组合索引”。

传统上,主键被视为唯一标识行的主键。 可能只有其中之一。

根据表的devise,可能没有主键。

主键就是 – “主键”。 这是主要指定行的唯一身份。 根据表的devise,这可能是一个误用,多个键表示独特性。

在SQL Server中,主键可能会聚集在一起。 这意味着剩余的列在索引的叶级附加到这个键上。 换句话说,一旦SQL Serverfind了密钥,它也会find该行(要清楚,这是因为聚集的方面)。

身份列仅仅是为行生成唯一ID的方法。

这两个经常一起使用,但这不是要求。

主键强调唯一性并避免同一列上所有logging的重复值,同时在不插入数据的情况下,在列中提供的数字越来越多。 这两个function可以在一个列上或不同的一个。

您可以使用IDENTITY不仅与整数,而且与任何数值数据types的比例为0

主键可以有规模,但不是必需的。

IDENTITY与PRIMARY KEY或UNIQUE约束结合使用,可以提供简单的唯一行标识符