什么是自动编号?
自动编号是指在数据库表中创建一个列,当插入新的行时,该列会自动递增生成一个唯一的序列号。自动编号可以提供简便的处理方式,因为它不会受到用户输入的影响。在 SQL Server 中,使用IDENTITY
设置自动编号。
如何实现自动编号?
使用IDENTITY实现自动编号
IDENTITY 是 SQL Server 用来创建自动递增列的关键字。IDENTITY 列的值不由用户指定,而是由 SQL Server 进行控制。
通过指定IDENTITY (seed, increment)
可以设置自动递增列。Seed 是指自动递增列的起始值,increment 是指自动递增列的增量。下面是一个简单的例子:
CREATE TABLE MyTable
(
ID int IDENTITY(1,1) PRIMARY KEY,
Name varchar(50) NOT NULL
)
上述代码创建了一个名为 MyTable 的表,在表中定义了两列,第一列是 ID,ID 的值由 SQL Server 控制自动递增生成,第二列是 Name,表示名字。ID 定义时使用了 PRIMARY KEY 关键字,标明 ID 是主键。
使用序列(Sequence)
在 SQL Server 2012 后,也可以使用序列(Sequence)来实现自动编号。序列(Sequence)是生成数字序列的对象,存储了数字序列的当前值。使用序列时,首先需要创建一个序列对象,然后指定在一个表中使用这个序列。下面是一个简单的例子:
CREATE SEQUENCE MySequence
START WITH 1
INCREMENT BY 1
MINVALUE 1
MAXVALUE 1000
CYCLE;
CREATE TABLE MyTable
(
ID int DEFAULT (NEXT VALUE FOR MySequence) PRIMARY KEY,
Name varchar(50) NOT NULL
)
上述代码中,首先创建了一个名为 MySequence 的序列对象,序列的起始值为 1,每次递增 1,最小值为 1,最大值为 1000,如果超过最大值,则循环到最小值重新开始。然后,在创建表时使用DEFAULT (NEXT VALUE FOR MySequence)
表示在插入数据时自动读取序列的下一个值,并将该值作为 ID 的值。ID 也被定义为主键。
自动编号的注意事项
插入指定的值
新建的表启用了自动编号后,在向表中插入数据时,不需要显式指定 ID 的值,因为 ID 是自动递增的。如果要插入指定的 ID 值,可以应用以下插入语句:
SET IDENTITY_INSERT MyTable ON;
INSERT INTO MyTable (ID, Name) VALUES (2, 'Sam');
SET IDENTITY_INSERT MyTable OFF;
注意:使用SET IDENTITY_INSERT MyTable ON;
允许插入指定的 ID 值,但是同时也可能会导致出现重复值。
删除自动编号列
如果要删除已经启用了自动编号的列,需要使用以下语句:
ALTER TABLE MyTable DROP COLUMN ID;
注意:删除自动编号列会同时删除所有现有的自动编号值。
重置自动递增列
如果需要重新设置自动递增列的起始值,可以使用以下语句:
DBCC CHECKIDENT ('MyTable', RESEED, 1)
上述语句将重置当前表的自动递增值为 1。
限制类型
自动编号只能用于整型数据,例如 int、bigint 或 smallint。
总结
自动编号是数据库表中非常常见的功能,能够很方便地控制主键列的值的生成。在 SQL Server 中,最常用的自动编号实现方式是使用IDENTITY
关键字或序列(Sequence),但是需要注意插入指定的值、删除自动编号列、重新设置自动递增值等问题。使用自动编号能够大大提高数据的可管理性,让我们更好地管理数据。