添加标识列 - ID 顺序



请参阅下面的DDL:

create table #test (name varchar(10),dateofbirth datetime)
insert into #test values ('ian', '1976-09-08')
insert into #test values ('maria', '1976-09-08')

我意识到没有主键是一个糟糕的设计选择。 我想添加一个新的标识列,如下所示:

alter table #test add id int identity

这正如我所期望的那样工作,即伊恩的 ID 为 1,玛丽亚的 ID 为 2。

此表中有 1000 万行。 我可以假设 ID 顺序会遵循它们输入到表中的顺序吗?例如,首先输入 Ian,因此他的 ID 为 1。 安妮是输入的第一百万行,因此 ID 为 1,000,000。

未定义将IDENTITY值分配给现有行的顺序。 对于堆示例,SQL Server 可能会按照用于存储行的文件/页/插槽的物理顺序分配值。 如果这与插入顺序匹配,则只是偶然的,不应依赖。 空间分配和重用可能导致数据的物理顺序与原始插入顺序不同,就像包含多个文件的数据库一样。

如果表具有聚集索引,则值可能会按聚集索引键的顺序分配,但同样,不要指望它。 关系数据库表在逻辑上是一组无序的行,应始终这样处理。

如果您有用于派生广告顺序的增量列,则可以在SELECT...INTO...ORDER BY查询中使用 IDENTITY 函数创建一个新表,其中包含按所需顺序分配的标识值。 以后插入的新行的标识值将按插入顺序递增。

最新更新