主键和身份有什么区别?
在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。 考虑一个电话簿。 如果电话簿按主要键(电话号码)分组,则返回“第一街”上的电话号码的查询将非常昂贵。
我关于身份和主要关键的一般规则是:
- 始终使用标识列
- 在范围查找中使用的一列或多列上创build聚簇索引
- 由于聚簇索引被添加到每个其他索引的末尾,所以保持聚簇索引变窄
- 创build主键和唯一索引以拒绝重复值
- 窄键更好
- 为连接中使用的每个列创build一个索引
这些是我的通用规则。
主键(也称为候选键)是具有唯一性和最小性质的任何一组属性。 这意味着关键的一列或多列被限制为唯一的。 换句话说,DBMS将不允许任何两行对这些属性具有相同的一组值。
IDENTITY属性有效地为列创build一个自动递增的默认值。 该列不必是唯一的,所以IDENTITY列不一定是关键。
但是,IDENTITY列通常用作关键字,因此它通常具有唯一性约束,以确保重复项不被允许。
根据反馈进行编辑
一个关键是独一无二的。 这是识别行的一种方法。 行可能没有,一个或几个键。 这些键可能包含一个或多个列。
键是具有唯一约束的索引。 这将它们与非关键指标区分开来。
任何具有多列的索引称为“组合索引”。
传统上,主键被视为唯一标识行的主键。 可能只有其中之一。
根据表的devise,可能没有主键。
主键就是 – “主键”。 这是主要指定行的唯一身份。 根据表的devise,这可能是一个误用,多个键表示独特性。
在SQL Server中,主键可能会聚集在一起。 这意味着剩余的列在索引的叶级附加到这个键上。 换句话说,一旦SQL Serverfind了密钥,它也会find该行(要清楚,这是因为聚集的方面)。
身份列仅仅是为行生成唯一ID的方法。
这两个经常一起使用,但这不是要求。
主键强调唯一性并避免同一列上所有logging的重复值,同时在不插入数据的情况下,在列中提供的数字越来越多。 这两个function可以在一个列上或不同的一个。
您可以使用IDENTITY不仅与整数,而且与任何数值数据types的比例为0
主键可以有规模,但不是必需的。
IDENTITY与PRIMARY KEY或UNIQUE约束结合使用,可以提供简单的唯一行标识符