(3.9)常用知识-标识值(identity)的不连续与强行插入

  概念:标识值 identity(begin,add_number) 是一种特殊的值,依赖于列,由sql server自动维护,是自增的,而且一般是不会重复的。但是sql server并不维护标识(identity)值的唯一(要保证其唯一需在使用列上添加主键或唯一约束),也不维护标识值的连续。

1.标识值不连续

  (1)当事务回滚的时候

  

--构建测试表
create table test_1(id int identity(1,1)  ,col int)
GO
--构建测试数据
insert into test_1(col) values(101),(102),(103)
--事务回滚
begin tran a
    insert into test_1(col) values(104),(105),(106)
rollback tran a
--再次插入
insert into test_1(col) values(107),(108),(109)
--验证
select * from test_1


结果如下:
  

   (2)删除记录

    无论被删除的标识值是最新添加的还是以前添加的,标识值均不会再回收利用,这里就不演示了。

  (3)使用dbcc checkident重置标识值

    

--现有数据
select * from test_1
--重置标识值
dbcc checkident(test_1,reseed,1)
--插入测试数据
insert into test_1(col) values(110),(111),(112)
--验证标识值
select * from test_1

结果如下:

现有数据~              验证标识值数据
         

2.标识值重复

  由于sql server不维护标识值的唯一,因此在没有主键、唯一约束等情况下,标识值可能会重复。

  (1)使用 set identity_insert tableNmae on 强行插入标识值

    

  (2)使用dbcc checkident重置标识~~1的(3)中已经描述过操作,这里不再赘述

猜你喜欢

转载自www.cnblogs.com/gered/p/9146616.html
3.9