SQL標識列初探

2021-04-28 11:40:30 字數 3291 閱讀 4478

sql標識列初探

一、標識列的定義以及特點

sql server中的標識列又稱識別符號列,習慣上又叫自增列。

該種列具有以下三種特點:

1、列的資料型別為不帶小數的數值型別

2、在進行插入(

insert

)操作時,該列的值是由系統按一定規律生成,不允許空值

3、列值不重複,具有標識表中每一行的作用,每個表只能有乙個標識列。

由於以上特點,使得標識列在資料庫的設計中得到廣泛的使用。

二、標識列的組成

建立乙個標識列,通常要指定三個內容:

1、型別(type)

在sql server 2000中,標識列型別必須是數值型別,如下:

decimal

、int

、numeric、

smallint

、bigint

、tinyint

其中要注意的是,當選擇decimal和numeric時,小數字數必須為零

另外還要注意每種資料型別所有表示的數值範圍

2、種子(seed)

是指派給表中第一行的值,預設為1

3、遞增量(increment)

相鄰兩個標識值之間的增量,預設為1。

三、標識列的建立與修改

標識列的建立與修改,通常在企業管理器和用transact

-sql語句都可實現,使用企業管理管理器比較簡單,請參考sql server的聯機幫助,這

裡只討論使用transact

-sql的方法

1、建立表時指定標識列

標識列可用

identity

屬性建立,因此在sql server中,又稱標識列為具有identity屬性的列或identity列。

下面的例子建立乙個包含名為id,型別為int,種子為1,遞增量為1的標識列

create

table

t_test

(id

intidentity(1

,1),name

varchar(50

))2、在現有表中新增標識列

下面的例子向表t_test中新增乙個名為id,型別為int,種子為1,遞增量為1的標識列

--建立表

create

table

t_test

(name

varchar(50

))--插入資料

insert

t_test(name)

values('

張三')--

增加標識列

alter

table

t_test

addid

intidentity(1

,1)3

、判段乙個表是否具有標識列

可以使用

objectproperty

函式確定乙個表是否具有

identity

(標識)列,用法:

select

objectproperty

(object_id('

表名'),'

tablehasidentity')

如果有,則返回1,否則返回0

4、判斷某列是否是標識列

可使用

columnproperty

函式確定 某列是否具有identity 屬性,用法

select

columnproperty

( object_id('

表名'),'

列名','

isidentity')

如果該列為標識列,則返回1,否則返回0

4、查詢某錶標識列的列名

sql server中沒有現成的函式實現此功能,實現的sql語句如下

select

column_name

from

information_schema.columns

where

table_name='

表名'andcolumnproperty

(     

object_id('

表名'),column_name,

'isidentity')

=15、標識列的引用

如果在sql語句中引用標識列,可用關鍵字identitycol代替

例如,若要查詢上例中id等於1的行,

以下兩條查詢語句是等價的

select

*from

t_test

where

identitycol=1

select

*from

t_test

whereid=

16、獲取標識列的種子值

可使用函式ident_seed,用法:

select

ident_seed('

表名')7

、獲取標識列的遞增量

可使用函式ident_incr ,用法:

select

ident_incr('

表名')8

、獲取指定表中最後生成的標識值

可使用函式ident_current,用法:

select

ident_current('表名

') 注意事項:當包含標識列的表剛剛建立,為經過任何插入操作時,使用ident_current函式得到的值為標識列的種子值,這一點在開發資料庫應用程式的時候尤其應該注意。

----允許對系統表進行更新

exec sp_configure 'allow updates',1

reconfigure with override

go----取消標識列標記

update syscolumns set colstat = 0 where id = object_id('tablename') and colstat = 1

go--插入id=8001-8003的行

...----恢復標識列標記

update syscolumns set colstat = 1 where id = object_id('tablename') and name = '標識列名稱'

----重新設定標識的起始值

dbcc checkident (表名稱, reseed, 10003)

----禁止對系統表進行更新

exec sp_configure 'allow updates',0

reconfigure with override

SQL標識列初探

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

SQL標識列初探

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

mysql創標識列語句 mysql 標識列

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