我的数据库中有一个表,其 id 是 int auto increment。当我创建一个 ndew 条目时,一切顺利,id 增加 1。
但是今天我看到了一个大洞。其中一条记录的 id=56,下一条记录的 id=1055。
这是什么原因造成的。我们没有在这个数据库上做备份。
我的数据库中有一个表,其 id 是 int auto increment。当我创建一个 ndew 条目时,一切顺利,id 增加 1。
但是今天我看到了一个大洞。其中一条记录的 id=56,下一条记录的 id=1055。
这是什么原因造成的。我们没有在这个数据库上做备份。
很可能在插入或事务回滚时出现了一些错误。表的标识值不受事务影响。因此,例如,即使您在表中插入一个值并回滚事务,您的身份值也将“保持递增”。简短的例子来说明:
create table _test (
id int identity (1,1)
,txt varchar(2)
)
insert into _test(txt)
select 'aa' as txt
insert into _test(txt)
select 'bb' as txt union all
select 'ccc'
GO
insert into _test(txt)
select 'dd' as txt
select * from _test
有几件事会导致这种情况
DBCC CHECKIDENT
还请记住,如果您使用DELETE
语句删除所有行,则种子不会重置为 1,如果您TRUNCATE
是表,则它是