事务回滚后,递增字段不连续

NetShape 2009-01-20 10:25:01
在sqlserver2000中,假设对一张含有递增字段的表进行事务操作,当事务回滚后,递增字段会出现不连续的情况,是不是事务不成功回滚后,一些生成的递增字段值会被丢弃掉呢?我想搞清楚这个问题,请高手多指导了。
...全文
149 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
fcuandy 2009-01-20
  • 打赏
  • 举报
回复
这是很正常的。

事务回滚,只是把刚加的记录再删除,而因为加记录时影响了标识列当前值,所以回滚后会有断号。

dbcc log(表名,3)

看下就知道了。

或者自己测试一下:

create table tb(id int identity(1,1),v varchar(10))
go

begin tran
insert tb select 'aa'
waitfor time '12:00'
rollback tran



新开窗口执行

select * from tb with(nolock)


发现有一行记录.


新开窗口执行:

select * from sys.indexes where object_id=object_id('tb')
go
/*
2073058421 NULL 0 0 HEAP 0 1 0 0 0 0 0 0 0 1 1
*/
select a.* from sys.system_internals_allocation_units a
inner join
sys.partitions b
on a.container_id = b.hobt_id
where object_id=object_id('tb')
/*
72057594043301888 1 IN_ROW_DATA 72057594038321152 1 2 2 1 0x590000000100 0x000000000000 0x6D0000000100
*/
go
dbcc traceon(3604)
go
dbcc extentinfo(aa,tb)
/*
1 89 1 1 2073058421 0 1 72057594038321152 In-row data 0x6100000000000000
*/
go


可以看到数据已写入数据页了,尽管事务未提交。



当然,上面的表没有建索引,有索引的情况,你可以尝试多插几条记录对比下区别, 不过对于你的问题来说,答案是一样的。

NetShape 2009-01-20
  • 打赏
  • 举报
回复
好的。谢谢大家了!
lanmengxjh 2009-01-20
  • 打赏
  • 举报
回复
是的.
水族杰纶 2009-01-20
  • 打赏
  • 举报
回复
--不連續沒關係,需要時候生成一列
if object_id('tb')is not null drop table tb
go
create table tb(ID int )
insert tb select 1
insert tb select 2
insert tb select 5
insert tb select 18
insert tb select 13
select id ,[newid]=(select count(*) from tb where id<=t.id) from tb t order by [newid]
/*id newid
----------- -----------
1 1
2 2
5 3
13 4
18 5

(影響 5 個資料列)
*/
水族杰纶 2009-01-20
  • 打赏
  • 举报
回复
是~~~
dawugui 2009-01-20
  • 打赏
  • 举报
回复
既然是递增的,就是自增列,连续不连续的,无所谓.
viva369 2009-01-20
  • 打赏
  • 举报
回复
是的
viva369 2009-01-20
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 fcuandy 的回复:]
这是很正常的。

事务回滚,只是把刚加的记录再删除,而因为加记录时影响了标识列当前值,所以回滚后会有断号。

dbcc log(表名,3)

看下就知道了。

或者自己测试一下:


SQL codecreate table tb(id int identity(1,1),v varchar(10))
go

begin tran
insert tb select 'aa'
waitfor time '12:00'
rollback tran




新开窗口执行


SQL codeselect * from tb with(nolock)



发现…
[/Quote]

分详细

34,575

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧