除了这些区别,主键和自增列相比只有主键列提供什么?
一列可以成为标识列而不是主键。
标识列仅是自动增长的列。
主键是唯一定义行的列或多列组合。
这两者经常一起使用,但并非必须如此。
本回答不是关于“什么是身份和主键”,而是更多地讲述为什么需要使用它们,因为Joe在上面已经正确回答了“什么是”问题。
身份是SQL控制的一个值。Identity是一个行功能。在SQL Server中,它是顺序的,增加或减少值。它应该永远不被修改,并且应忽略价值中的间隙。链接表B到表A中非常有用,因为该值永远不会重复。在每种情况下,身份都不是聚集索引的最佳选择。如果一张表包含审计数据,则以发生日期创建聚集索引可能更好,因为记录的日期在数据页面中是顺序的,这样将使得回答“今天到四天前发生了什么”这个问题变得更容易。
主键使行中的列成为唯一的。主键是列函数。任何表上只能定义一个主键,但可以创建多个唯一索引来模拟主键。并不总是将主键聚集。考虑电话簿。如果按主键(电话号码)聚集电话簿,则返回“First Street”上的电话号码的查询将非常昂贵。
我遵循的身份和主键的一般规则如下:
这些是我遵循的一般规则。
主键(也称为候选键)是具有唯一性和最小化属性的任何属性集。这意味着关键列或列被限制为唯一。换句话说,DBMS不允许任何两行在那些属性上具有相同的值。
IDENTITY属性有效地为列创建了一个自动递增的默认值。该列不必是唯一的,因此IDENTITY列不一定是一个键。
然而,IDENTITY列通常打算用作键,因此它通常有一个唯一性约束条件,以确保不允许重复项。
主键列和自增列的主要区别:
主键列:
自增列:
根据反馈所做的修改
一个键是唯一的,用于标识一行。它是一种识别行的方式。行可能没有、有一个或多个键。这些键可以由一个或多个列组成。
键是带有唯一约束条件的索引。这使它们与非键索引区分开来。
任何具有多列的索引都称为“复合索引”。
传统上,主键被视为唯一标识行的主要键。只能有一个主键。
根据表的设计,可能没有主键。
主键就是那个“主键”。它是指定行的唯一标识的主要键。根据表的设计,这可能是一个误称,多个键表达了唯一性。
在SQL Server中,主键可以是聚集的。这意味着剩余的列附加到该键的索引叶级别上。换句话说,一旦SQL Server找到了键,它也找到了行(需要明确的是,这是因为聚集方面)。
自增列只是一种为行生成唯一ID的方法。
这两者经常一起使用,但并非必须的。
您不仅可以将IDENTITY与整数一起使用,还可以将其与任何具有0比例的数字数据类型一起使用。
主键可以具有比例,但不是必需的。
IDENTITY与PRIMARY KEY或UNIQUE约束结合使用,可提供简单的唯一行标识符。
创建表pktest(nonpk int identity(1,1),pk int primary key not null) - KenJ