一、标识列的定义以及特点
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函数得到的值为标识列的种子值,这一点在开发数据库应用程序的时候尤其应该注意。
9.[SQL Server]关于标识列从1开始计数的问题
在SQL Server中, 我们有时需要在清空数据表之后,重新添加记录时,标识列重新从1开始计数。
我们只需要在插入记录之前,执行下面的命令:
DBCC CHECKIDENT (表名, RESEED, 0)
执行 TRUNCATE TABLE 也可以做到,而且效率高因为:
用delete将会把每个操作记录到日志中,所以效率低 ,truncate table则一次过,效率快很多。
但是,Truncate Table有限制,比如说这个标识列是另外一个表的外键,而且标识列当前值为1,插入行从2开始,
而DBCC CHECKIDENT (表名, RESEED, 0)可以用于即使有外键的情况下。
- 浏览: 235081 次
- 性别:
- 来自: 上海
最新评论
-
iwindyforest:
pinocchio2mx 写道iwindyforest 写道H ...
VMware Workstation 11 或者 VMware Player 7安装MAC OS X 10.10 Yosemite -
nng119:
找不到设备的安装信息 这个问题怎么解决的?
VMware Workstation 11 或者 VMware Player 7安装MAC OS X 10.10 Yosemite -
pinocchio2mx:
iwindyforest 写道Hi pinocchio2mx ...
VMware Workstation 11 或者 VMware Player 7安装MAC OS X 10.10 Yosemite -
iwindyforest:
Hi pinocchio2mx 兄弟, 这个镜像是好的, 我安 ...
VMware Workstation 11 或者 VMware Player 7安装MAC OS X 10.10 Yosemite -
pinocchio2mx:
蛋疼啊,折腾一晚上还没搞定!网上的教程没一篇靠谱的,摸摸索索到 ...
VMware Workstation 11 或者 VMware Player 7安装MAC OS X 10.10 Yosemite
相关推荐
标识列与普通列相互转的示例 --创建测试表 CREATE TABLE t1(ID int IDENTITY,A int) GO --插入记录 INSERT t1 VALUES(1) GO --1. 将IDENTITY(标识)列变为普通列 ALTER TABLE t1 ADD ID_temp int GO UPDATE t1 SET ...
### SQL Server - 让标识列重新开始计算 在SQL Server中,标识列(Identity Column)是一种自增型字段,常用于自动为表中的记录分配唯一的序列号。这在创建主键或唯一索引时非常有用,尤其是在需要为新记录自动分配...
如果我们在标识列中插入值,例如: 代码如下:insert member(id,username) values(10,’admin’) 则在查询分析器里面会返回错误信息: [plain] 引用内容 服务器: 消息 544,级别 16,状态 1,行 1 当 IDENTITY_...
代码如下: –允许对系统表进行更新 exec sp_configure ‘allow updates’,1 reconfigure with override GO –取消标识列标记 update syscolumns set colstat = 0 where id = object_id(‘tablename’) and colstat ...
SQL SERVER 自增列,也称为标识列,是数据库设计中常用的一种特性,特别是在关系型数据库管理系统如SQL Server中。自增列通常用作主键的一部分,自动递增其值,为新插入的每一行提供一个唯一的标识。这极大地方便了...
#### 四、SQL Server 标识列的重置功能 - **标识列重置**: 如果需要重新开始生成标识列的值,可以使用`DBCC CHECKIDENT`命令。例如,如果需要重置表`tt`的标识列值从0开始,可以执行`DBCC CHECKIDENT ('tt', RESEED...
"SQL SERVER中自动标识列的改进" 本文讨论了SQL SERVER中自动标识列的两大限制:一是初始值只能是整型的数据,无法使用文本型数据或包含前导零的文本型数据;二是删除表中的记录或删除记录后再插入记录将导致表中的...
在SQL Server中,当我们在一个表中使用了自动编号(Identity)列来为新插入的行生成唯一的标识符时,可能会遇到这样的情况:在测试或数据清理后,想要重置这个序列,以便再次从头开始计数。这个问题的焦点在于如何在...
这个特性在SQL Server中被称为“标识列”(Identity Column)。下面我们将详细讲解如何设置和使用SQL Server列的自动增加功能。 1. **标识列的定义**: 标识列是一种特殊类型的整数列,其值由SQL Server自动递增。...
每个事件类别下又包含多个事件,比如“SQL:BatchStarting”表示批次SQL语句开始执行,而“Lock:Deadlock”则标识了发生死锁的情况。 2. **追踪模板**:预定义的追踪模板如“标准”、“跟踪SQL Server审计”等,可...
在这里,你需要定义DSN(Data Source Name),这可以是任意名称,用于标识你要连接的SQL Server。在描述中,可以输入简短说明,便于记忆。首次连接时,输入SQL Server所在的计算机IP地址。然后,选择"使用用户输入...
本篇文章将深入解析“SqlServer查看表结构”的方法,以及如何利用SQL语句来获取详细的表结构信息,这对于数据库管理员(DBA)、数据分析师、软件开发者等专业人士来说尤为关键。 ### SQL Server查看表结构的重要性 ...
在Microsoft SQL Server中,为了修改标识列,首先需要启用对系统表的更新权限。这是因为标识列的信息存储在系统表`syscolumns`中,而默认情况下,用户是不允许直接更新这些系统表的。启用更新权限可以通过以下步骤...
在本“SQL Server大作业”中,我们主要探讨的是如何使用SQL Server进行数据库的设计与实现。这个作业可能包括了从需求分析、概念模型设计、逻辑结构设计到物理结构设计的全过程,同时也涉及到SQL语言的使用,如数据...
在SQL Server中,`SET IDENTITY_INSERT`是一个重要的命令,它主要用于处理标识列(即自动编号列,通常由`IDENTITY`关键字定义)的显式赋值问题。默认情况下,当向一个包含`IDENTITY`属性的表中插入数据时,标识列的...
### SqlServer数据库的数据类型详解 数据类型在编程与数据库管理中扮演着至关重要的角色,它不仅定义了数据的存储方式,还决定了数据可以执行的操作。SQL Server作为一种广泛使用的数据库管理系统,提供了丰富的...
### SQL Server 使用 UNPIVOT 函数实现列转行 #### 概述 在 SQL Server 中,`UNPIVOT` 函数是一个非常实用的功能,主要用于将数据表中的列转换为行,即“列转行”操作。这种操作在数据分析过程中经常用到,尤其是...
### CDC操作Sqlserver2008 #### 概述 变更数据捕获(Change Data Capture,简称CDC)是SQL Server的一项重要功能,主要用于记录数据库表中的数据更改历史。这一功能在进行数据分析、日志记录、数据复制等场景下...
主键是表中用于唯一标识每条记录的一列或一组列。可以使用以下语句添加或删除主键: - 添加主键: ```sql ALTER TABLE tabname ADD PRIMARY KEY (col); ``` - 删除主键: ```sql ALTER TABLE tabname DROP ...