1. 程式人生 > >(3.9)常用知識-標識值(identity)的不連續與強行插入

(3.9)常用知識-標識值(identity)的不連續與強行插入

alt 可能 values 標識 -- col 回滾 常用 eat

  概念:標識值 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)的不連續與強行插入