码迷,mamicode.com
首页 > 其他好文 > 详细

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

时间:2018-06-06 21:45:28      阅读:177      评论:0      收藏:0      [点我收藏+]

标签:ack   情况   src   test   重复   重置   技术   sql   事务   

  概念:标识值 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)中已经描述过操作,这里不再赘述

 

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

标签:ack   情况   src   test   重复   重置   技术   sql   事务   

原文地址:https://www.cnblogs.com/gered/p/9146616.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!