在SQL Server数据库中,主键和标识列之间有什么区别?列可以是主键而不是缩进。但是,如果不是主键,则列不能是标识。
除了差异之外,PK和Identity列提供的只是PK列的内容不是什么?
编辑:哎呀。如下所述并且现在由我验证,列可以是身份而不是PK。当我测试这个时,我的列类型是一个字符串,我无法将其设置为标识。有道理。
答案 0 :(得分:75)
一个列绝对可以是一个身份而不是PK。
身份只是一个自动增加列。
主键是定义行的唯一列。
这两个经常一起使用,但并不要求这样做。
答案 1 :(得分:12)
这个答案更多的是为什么身份和首要关键比他们是什么,因为乔正确回答了上面的内容。
标识是SQL控制的值。标识是一个行函数。它至少在SQL Server中是连续的值增加或减少。永远不应该修改它,并且应该忽略值中的间隙。标识值在将表B链接到表A时非常有用,因为该值永远不会重复。在每种情况下,标识都不是聚簇索引的最佳选择。如果一个表包含审计数据,那么聚集索引可能会更好地在发生的日期创建,因为它将显示“今天和四天之间发生的事情”的答案,而工作量较少,因为日期的记录是连续的。数据页。
主键使行中的一列或多列唯一。 Primay键是一个列函数。在任何表上只能定义一个主键,但可以创建模拟主键的多个唯一索引。对主键进行聚类并不总是正确的选择。考虑一下电话簿。如果电话簿按主键(电话号码)聚集,则返回“第一街”电话号码的查询将非常昂贵。
我遵循的身份和主键的一般规则是:
这些是我的一般规则。
答案 2 :(得分:8)
主键(也称为候选键)是具有唯一性和最小性属性的任何属性集。这意味着一个或多个关键列被限制为唯一的。换句话说,DBMS不允许任何两行具有这些属性的相同值集。
IDENTITY属性有效地为列创建自动递增的默认值。该列不必是唯一的,因此IDENTITY列不一定是键。
但是,IDENTITY列通常用作键,因此它通常具有唯一性约束,以确保不允许重复。
答案 3 :(得分:1)
基于反馈的编辑
键是行唯一的。这是一种识别行的方法。行可以没有,一个或几个键。这些键可能包含一列或多列。
键是具有唯一约束的索引。这将它们与非关键索引区分开来。
任何具有多列的索引都称为“复合索引”。
传统上,主键被视为唯一标识行的主键。可能只有其中一种。
根据表的设计,可能没有主键。
主键只是 - 一个“主键”。它是指定行的唯一标识的主要部分。根据表格的设计,这可能是用词不当,多个键表示唯一性。
在SQL Server中,可以对主键进行群集。这意味着剩余的列在索引的叶级附加到此键。换句话说,一旦SQL Server找到了密钥,它也会找到该行(很明显,这是因为 clustered 方面)。
标识列只是一种为行生成唯一ID的方法。
这两个经常一起使用,但这不是必需的。
答案 4 :(得分:0)
主键强调唯一性并避免同一列上所有记录的重复值,而标识在列中提供不断增加的数字而不插入数据。 这两个功能可以在一个列上,也可以在不同的列上。
答案 5 :(得分:0)
您不仅可以将IDENTITY用于整数,还可以将其用于任何比例为0的数值数据类型
主键可能具有比例但不是必需的。
IDENTITY与PRIMARY KEY或UNIQUE约束相结合,允许您提供简单的唯一行标识符
答案 6 :(得分:0)
主要和身份列之间的主要区别
主列:
身份列: