(3.9)常用知識-標識值(identity)的不連續與強行插入
阿新 • • 發佈:2018-06-06
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)的不連續與強行插入