在写论文时,我正在写关于 SQL 数据类型以及在设计数据库结构时如何明智地选择它们的部分。
我在某处读到,作为最佳实践,您不应该为 PK 分配负值。这导致了以下问题:
默认情况下,SQL Server 实例会为主键分配负值吗?我知道可以自己分配它们,但我想知道 SQL 服务器是否会默认分配它们,如果是,在哪些情况下?
在写论文时,我正在写关于 SQL 数据类型以及在设计数据库结构时如何明智地选择它们的部分。
我在某处读到,作为最佳实践,您不应该为 PK 分配负值。这导致了以下问题:
默认情况下,SQL Server 实例会为主键分配负值吗?我知道可以自己分配它们,但我想知道 SQL 服务器是否会默认分配它们,如果是,在哪些情况下?
我假设,但我从未尝试过,如果您创建一个指定为 的主键IDENTITY(0,-1)
,它将自动分配从 0 开始的降序值
Primary Key
和Identity之间存在区别。Identity
属性在表中创建一个标识列,语法:
IDENTITY [ ( seed , increment ) ]
其中increment
是添加到加载的前一行的标识值的增量值,可以是 + 或 - 取决于要求。
主键是包含唯一标识表中每一行的值的列或列组合。如果它们保证表中行的唯一标识,则它可以是除 Identity 列之外的任何列集。
回到这个问题,一个表只能有一个 PRIMARY KEY 约束,而参与 PRIMARY KEY 约束的列不能接受空值。因为 PRIMARY KEY 约束保证数据的唯一性,所以它们经常在标识列上定义。
因此 SQL Server 不会为主键分配任何默认值,因为它是一个约束。为表指定 PRIMARY KEY 约束时,数据库引擎通过为主键列创建唯一索引来强制数据唯一性。