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 int IDENTITY ( 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
ADD ID int IDENTITY ( 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 = ' 表名 ' AND COLUMNPROPERTY (
OBJECT_ID ( ' 表名 ' ),COLUMN_NAME, ' IsIdentity ' ) = 1
5 、标识列的引用
如果在SQL语句中引用标识列,可用关键字IDENTITYCOL代替
例如,若要查询上例中ID等于1的行,
以下两条查询语句是等价的
SELECT * FROM T_test WHERE IDENTITYCOL = 1
SELECT * FROM T_test WHERE ID = 1
6 、获取标识列的种子值
可使用函数IDENT_SEED,用法:
SELECT IDENT_SEED ( ' 表名 ' )
7 、获取标识列的递增量
可使用函数IDENT_INCR ,用法:
SELECT IDENT_INCR ( ' 表名 ' )
8 、获取指定表中最后生成的标识值
可使用函数IDENT_CURRENT,用法:
SELECT IDENT_CURRENT( ' 表名 ' )
注意事项:当包含标识列的表刚刚创建,为经过任何插入操作时,使用IDENT_CURRENT函数得到的值为标识列的种子值,这一点在开发数据库应用程序的时候尤其应该注意。
运维网声明
1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网 享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com