在SQL Server数据库中,主键列和标识列之间有什么区别?列可以是主键而不是标识。但是,列不能是标识而不是主键。除了这些区别之外,PK和Identity列还提供了PK列所不能提供的哪些功能?
os8fio9y1#
一个列绝对可以是一个标识而不是一个PK。标识就是一个自动递增的列。主键是定义行的唯一列。这两个经常一起使用,但没有必要这样。
bfhwhh0e2#
这个答案更多的是为什么标识和主键,而不是它们是什么,因为Joe已经正确地回答了上面的问题。标识是您的SQL控制的值。标识是一个行函数。它是连续的,值递增或递减。至少在SQL Server中是这样。它永远不应被修改,并且值中的间隔应被忽略。标识值在将表B链接到表A时非常有用,因为该值永远不会重复。标识并非在所有情况下都是聚集索引的最佳选择。如果表包含审核数据,则最好在发生日期创建聚集索引,因为日期记录在数据页中是连续的,所以它可以用较少的工作量提供“今天到四天前发生了什么”问题的答案。主键使行中的一列或多列唯一。主键是列函数。在任何表上只能定义一个主键。但可以创建多个唯一索引来模拟主键。聚集主键并不总是正确的选择。请考虑电话簿。如果电话簿按主键聚集(电话号码)返回“第一街道”上的电话号码的查询将是非常昂贵的。标识和主键遵循的一般规则是:1.始终使用标识列1.对范围查找中使用的列创建聚集索引1.保持聚集索引较窄,因为聚集索引将添加到每隔一个索引的末尾1.创建主键和唯一索引以拒绝重复值1.窄键更好1.为连接中使用的每个列创建索引这些是我的一般规则。
wydwbb8l3#
主键(也称为候选键)是具有唯一性和最小性属性的任何属性集。这意味着键列被约束为唯一的。换句话说,DBMS不允许任何两行具有相同的属性值集。IDENTITY属性有效地为列创建了一个自动递增的默认值,但是该列不必是唯一的,因此IDENTITY列不一定是键。但是,IDENTITY列通常用作键,因此它通常具有唯一性约束,以确保不允许重复。
9cbw7uwe4#
主列和标识列之间的主要区别主色谱柱:
标识列:
rqqzpn5f5#
根据反馈进行编辑
键对于行是唯一的。它是标识行的一种方式。行可以没有键、有一个键或有多个键。这些键可以由一列或多列组成。键是具有唯一约束的索引,这使它们与非键索引不同。任何具有多列的索引都称为“复合索引”。传统上,主键被视为唯一标识一行的主键。它们中可能只有一个。根据表的设计,可能没有主键。主键就是一个“主键”。它是指定行的唯一标识的主要键。根据表的设计,这可能是用词不当,多个键表示唯一性。在SQL Server中,主键可以是聚集的。这意味着其余列在索引的叶级附加到此键。换句话说,一旦SQL Server找到了键,它也找到了行(需要说明的是,这是因为 clustered 方面)。标识列只是为行生成唯一ID的一种方法。这两个经常一起使用,但这不是必需的。
9avjhtql6#
IDENTITY不仅可以用于整数,还可以用于小数位数为0的任何数值数据类型主键可以有刻度,但不是必需的。IDENTITY与PRIMARY KEY或UNIQUE约束结合使用,使您可以提供一个简单的唯一行标识符
dxpyg8gm7#
主键强调唯一性,避免同一列上所有记录的重复值,而标识提供列中的递增数字而不插入数据。这两个特性可以在单个列上,也可以在不同的列上。
7条答案
按热度按时间os8fio9y1#
一个列绝对可以是一个标识而不是一个PK。
标识就是一个自动递增的列。
主键是定义行的唯一列。
这两个经常一起使用,但没有必要这样。
bfhwhh0e2#
这个答案更多的是为什么标识和主键,而不是它们是什么,因为Joe已经正确地回答了上面的问题。
标识是您的SQL控制的值。标识是一个行函数。它是连续的,值递增或递减。至少在SQL Server中是这样。它永远不应被修改,并且值中的间隔应被忽略。标识值在将表B链接到表A时非常有用,因为该值永远不会重复。标识并非在所有情况下都是聚集索引的最佳选择。如果表包含审核数据,则最好在发生日期创建聚集索引,因为日期记录在数据页中是连续的,所以它可以用较少的工作量提供“今天到四天前发生了什么”问题的答案。
主键使行中的一列或多列唯一。主键是列函数。在任何表上只能定义一个主键。但可以创建多个唯一索引来模拟主键。聚集主键并不总是正确的选择。请考虑电话簿。如果电话簿按主键聚集(电话号码)返回“第一街道”上的电话号码的查询将是非常昂贵的。
标识和主键遵循的一般规则是:
1.始终使用标识列
1.对范围查找中使用的列创建聚集索引
1.保持聚集索引较窄,因为聚集索引将添加到每隔一个索引的末尾
1.创建主键和唯一索引以拒绝重复值
1.窄键更好
1.为连接中使用的每个列创建索引
这些是我的一般规则。
wydwbb8l3#
主键(也称为候选键)是具有唯一性和最小性属性的任何属性集。这意味着键列被约束为唯一的。换句话说,DBMS不允许任何两行具有相同的属性值集。
IDENTITY属性有效地为列创建了一个自动递增的默认值,但是该列不必是唯一的,因此IDENTITY列不一定是键。
但是,IDENTITY列通常用作键,因此它通常具有唯一性约束,以确保不允许重复。
9cbw7uwe4#
主列和标识列之间的主要区别
主色谱柱:
标识列:
rqqzpn5f5#
根据反馈进行编辑
键对于行是唯一的。它是标识行的一种方式。行可以没有键、有一个键或有多个键。这些键可以由一列或多列组成。
键是具有唯一约束的索引,这使它们与非键索引不同。
任何具有多列的索引都称为“复合索引”。
传统上,主键被视为唯一标识一行的主键。它们中可能只有一个。
根据表的设计,可能没有主键。
主键就是一个“主键”。它是指定行的唯一标识的主要键。根据表的设计,这可能是用词不当,多个键表示唯一性。
在SQL Server中,主键可以是聚集的。这意味着其余列在索引的叶级附加到此键。换句话说,一旦SQL Server找到了键,它也找到了行(需要说明的是,这是因为 clustered 方面)。
标识列只是为行生成唯一ID的一种方法。
这两个经常一起使用,但这不是必需的。
9avjhtql6#
IDENTITY不仅可以用于整数,还可以用于小数位数为0的任何数值数据类型
主键可以有刻度,但不是必需的。
IDENTITY与PRIMARY KEY或UNIQUE约束结合使用,使您可以提供一个简单的唯一行标识符
dxpyg8gm7#
主键强调唯一性,避免同一列上所有记录的重复值,而标识提供列中的递增数字而不插入数据。这两个特性可以在单个列上,也可以在不同的列上。