在SQL Server数据库中,主键和标识列之间有什么区别?列可以是主键,而不必相同。但是,如果没有主键,则列不能是标识。
除了差异之外,PK和“身份”列还提供什么,而仅PK列不提供?
Answers:
列绝对可以是身份而不是PK。
身份只是一个自动增加的列。
主键是定义行的一个或多个唯一列。
这两个经常一起使用,但是并不需要如此。
因为乔已经正确回答了上面的问题,所以这个答案更多的是为什么身份和primay键。
身份是SQL控制的值。身份是行功能。至少在SQL Server中,它是按顺序递增或递减值。永远不要修改它,并且值中的空白应该被忽略。身份值在将表B链接到表A时非常有用,因为该值永远不会重复。在每种情况下,身份并不是聚集索引的最佳选择。如果表包含审计数据,则最好在发生日期创建聚簇索引,因为它将以较少的工作量回答“今天和四天之间发生了什么”问题,因为日期的记录在表中是连续的。数据页。
主键使行中的一列或多列唯一。Primay键是一种列函数。在任何表上只能定义一个主键,但是可以创建多个唯一索引来模拟主键。群集主键并不总是正确的选择。考虑一下电话簿。如果电话簿是由主键(电话号码)组成的,则返回“ First Street”上电话号码的查询将非常昂贵。
我遵循的身份和主键通用规则是:
这些是我的一般规则。
主键(也称为候选键)是具有唯一性和最小性属性的任何属性集。这意味着一个或多个键列被限制为唯一。换句话说,DBMS不允许任何两行具有这些属性的相同值集。
IDENTITY属性有效地为列创建一个自动递增的默认值。该列不必是唯一的,因此IDENTITY列不一定是键。
但是,IDENTITY列通常打算用作键,因此通常对它具有唯一性约束,以确保不允许重复。
根据反馈进行的编辑
键是一行唯一的。这是识别行的一种方式。行可能没有,只有一个或几个键。这些键可能包含一列或多列。
键是具有唯一约束的索引。这将它们与非关键索引区分开来。
任何具有多列的索引都称为“复合索引”。
传统上,主键被视为唯一标识行的主键。可能只有其中之一。
根据表的设计,可能没有主键。
主键就是这样-一个“主键”。它是指定行的唯一标识的主要对象。根据表的设计,这可能是用词不当,并且多个键表示唯一性。
在SQL Server中,主键可能是群集的。这意味着剩余的列将在索引的叶级别附加到此键。换句话说,一旦SQL Server找到了密钥,它也会找到该行(要明确,这是由于群集方面)。
标识列只是一种为行生成唯一ID的方法。
这两个经常一起使用,但这不是必需的。