标签: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