sql 自增ID之重置

2022-08-02 13:03:10 字數 1083 閱讀 1638

問題背景:

在使用資料庫時,經常要使用主鍵,並設定其為自增欄位,我使用的初衷是想要資料庫自動給我分配乙個空閒的id給我使用,但是使用後發現,如果我們刪除資料後,後面新增的資料的自增id始終是在之前的基礎上開始的,我想要的自增欄位始終從1開始。

在多次插入資料後,自增的id號比較混亂,而且刪除資料後,自增的id並不會歸零,經過多方查閱,了解到有兩種方法可以控制自增的字段:

方法一:    如果曾經的資料都不需要的話,可以直接清空所有資料,並將自增欄位恢復從1開始計數

truncate table 表名

方法二:   dbcc checkident (''table_name'', reseed, new_reseed_value)  當前值設定為   new_reseed_value。如果自建立表後沒有將行插入該錶,則在執行   dbcc   checkident  後插入的第一行將使用   new_reseed_value   作為標識。否則,下乙個插入的行將使用   new_reseed_value  +   1。如果   new_reseed_value   的值小於標識列中的最大值,以後引用該錶時將產生   2627   號錯誤資訊。

方法二 不會清空已有資料,操作比較靈活,不僅可以將自增值歸零,也適用於刪除大量連續行後,重新設定自增值並插入新的資料;或從新的值開始,當然不能和已有的衝突。

當表中有了一下資料後

執行語句   dbcc checkident (''dbo.person'', reseed, 10) 後再通過management studio新增資料時,id就會自動從11開始,也就是new_reseed_value+1開始

如果想要每次的資料都是從1開始使用的,每次新增資料的時候都是用 dbcc checkident (''dbo.person'', reseed, 0)。

資料不連貫的原因是刪除資料導致的。

mysql自增id重置

參考 使用truncate truncate table 說明 使用truncate會刪除表的資料釋放空間,並且重置字自增id,但不會刪除表的定義。用處 需要清空表的時候才能使用。使用修改標識 dbcc checkident table name reseed,new reseed value 說明...

mysql重置所有表自增id

建立儲存過程之前需判斷該儲存過程是否已存在,若存在則刪除 drop procedure ifexists init sql string 建立儲存過程 create procedure init sql string begin 定義變數 declare s int default0 declare...

sql server 重置自增

delete tb where id 100 dbcc checkident tb reseed,1 dbcc checkident tb reseed 其結果將 tb 表的自增種子設定為當前表裡標識列的最大值 再次增加資料就會繼續那個數字了 實測 建立測試環境 if object id tb is...