SQL Server创建带有IDENTITY列的表 - 唯一性

3
在SQL Server中,我创建了一张带有ID列的表,并将其设置为自增列。
EmployeeID int NOT NULL IDENTITY(100,10) PRIMARY KEY

据我所知,当使用IDENTITY功能时,它会自动递增EmployeeID。但我不确定的是:

  • 这个IDENTITY号码是否是唯一的?
  • SQL是否会在表格中搜索整个列来确认所创建的数字不存在?
  • 我能否手动覆盖自动递增的数字?
  • 如果我手动覆盖了那个数字,输入的数字会被检查以确保它不是重复或已存在的ID号码吗?

感谢提供的任何帮助。

1个回答

1

身份证号码是唯一的吗?

是的,身份属性是唯一的。

SQL是否会在整个列中搜索以确认已创建的数字不存在于表中?

不需要,该属性只是递增旧值。

我可以手动覆盖自动增量编号吗?

是的,您可以使用SET IDENTITY_INSERT TABLENAME ON

如果我手动覆盖了该编号,那么我输入的编号是否会被检查以确保它不是重复/现有的ID编号?

不会,这将不由SQL Server处理,您必须确保有约束条件来处理此问题。

以下是一个简单的演示:

create table #temp
(
    id int identity(1,1)
)

insert into #temp
default values
go 3

select * from #temp--now id column has 3

set identity_insert  #temp on
insert into #temp (id)
values(4)

set identity_insert  #temp off

select * from #temp--now id column has 4

insert into #temp
default values
go

select * from #temp--now id column has 5,next value from the last highest

更新评论中的信息:
标识列在重新设置后将允许间隙,同时您无法更新它们。


2
只要不改变标识符,它就保持唯一性!您可以轻松地将标识符重新设置为某个起始值,然后SQL Server将会产生重复项!仅仅拥有“IDENTITY”规范并不能保证唯一性! - marc_s
1
谢谢Marc,我会添加那些信息。 - TheGameiswar
2
我想理解 IDENTITY 只是从一个起始点生成新值,确保在生成时没有重复非常重要。但是 IDENTITY 特性 不会 检查表中现有值是否与新生成的值唯一。 - marc_s
2
还有两件事需要补充 - 无法更新 Identity 列中的现有值。您可以选择使用 set identity insert <tablename> on 插入特定值,但无法更改已插入的值。第二件事是,在设置 identity insert 为 on 并插入值后,必须将其设置回 off,因为在同一会话中不能同时拥有两个设置了 identity insert 的表。 - Zohar Peled
1
说了这么多,问题中的身份列永远不会包含重复的值,因为它也是表的主键。 - Zohar Peled
显示剩余4条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接