SQL SERVER ID標識列重新置1並排列

2021-08-27 07:45:05 字數 1216 閱讀 3262

我們在使用資料庫時可能會刪除一些記錄,因此,資料表中的標識就有可能不是由1開始或其間會斷斷續續.可以怎麼來使它重新置1並排列呢?

大家經常使用sql server的id自增長,也就是所謂的標識列來充當某張表的主鍵。

這裡有兩個概念要澄清:

1.標識列:

可用identity屬性建立,使應用程式開發人員得以對錶中所插入的第一行指定標識數字(identity seed屬性),並確定要新增到種子上的增量(identity increment屬性)以決定後面的標識數字。在向具有識別符號列的表中插入值時,通過遞增種子值的方法自動生成下乙個標識值。

2.主鍵:

可用primary key表示。唯一標識表中的所有行的乙個列或一組列。主鍵不允許空值。不能存在具有相同的主鍵值的兩個行,因此主鍵值總是唯一標識單個行。

那麼,當我們表中的資料很多,又有些刪除的操作時,標識列就不連貫了,我們如何讓表中已有記錄的標識列從1開始重新排列,並將標識列的下乙個值設為記錄數加1呢?下面我們以一張studentid identity(1,1)primary key,name,age)表為例,給大家提供幾種方法,以供參考:

(1)手工方法:

先要取消標識列,完成下面的語句後再將標識列加上,這樣標識列又可以按順序遞增了。這裡你可以直接使用企業管理器操作。

declare@iint select@i=0 updatestudent set@i=@i 1,id=@i

(2)全自動方法:

利用臨時表,步驟就是將表中除id以外的資料拷貝到臨時表中,再清空原表,插入臨時表的資料,最後刪除臨時表。

--將資料倒入臨時表

selectname,ageinto#fromstudentorderbyid

--清空源表,它同時會重置標識列

truncatetablestudent//清空表,標識種子置初值,這裡要注意的是下面的語句會清空表中的所有原有資料。

--將資料導回源表

insertintostudentselect*from#

--刪除臨時表

droptable#

這裡順便提一下,有同志在插入測試資料的時候一條一條記錄的插入,這樣太浪費時間,我們可以寫一條迴圈語句加快測試速度:

declare@iint set@i=1 while@i=100 begin insertintostudentvalues('tbag' cast(@i as varchar)

,25 @i)

set@i=@i 1 end

mysql創標識列語句 mysql 標識列

標識列 又稱為自增長列 含義 可以不用手動插入值,系統提供預設的序列值 特點 1.表示列必須和主鍵搭配嗎?不一定,但是要求是乙個key 2.乙個表中只能有乙個標識列!3.標識列的型別有限制嗎?只能是數值型別 int,float,double 4.標識列可以通過set auto increment i...

SQL標識列初探

sql標識列初探 一 標識列的定義以及特點 sql server中的標識列又稱識別符號列,習慣上又叫自增列。該種列具有以下三種特點 1 列的資料型別為不帶小數的數值型別 2 在進行插入 insert 操作時,該列的值是由系統按一定規律生成,不允許空值 3 列值不重複,具有標識表中每一行的作用,每個表...

SQL標識列初探

sql標識列初探 一 標識列的定義以及特點 sql server中的標識列又稱識別符號列,習慣上又叫自增列。該種列具有以下三種特點 1 列的資料型別為不帶小數的數值型別 2 在進行插入 insert 操作時,該列的值是由系統按一定規律生成,不允許空值 3 列值不重複,具有標識表中每一行的作用,每個表...