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