SQL基础知识V2——自增长列

自增长列的作用

自增长列会在新记录插入表中时生成一个唯一的数字。

我们通常希望在每次插入新记录时自动创建主键字段的值。

我们可以在表中创建一个自动增量字段。


MySQL中的自增长列

MySQL中的自增长是关键字Auto-increment,通常作为主键

以下SQL语句将 "Persons" 表中的“ID”列定义为自动递增(auto-increment)主键字段:

CREATE TABLE Persons
(
ID int NOT NULL AUTO_INCREMENT,
姓名 varchar(255) NOT NULL,
地址 varchar(255),
城市 varchar(255),
省份 varchar(255),
PRIMARY KEY (ID)
)

MySQL使用AUTO_INREMENT关键字来执行自动增量( auto-increment )任务。

默认情况下,AUTO_INREMENT的起始值为1,每个新记录增加1。

比如我们往Persons表中插入一条记录

INSERT INTO Persons(姓名,地址,城市,省份)
VALUES ('张三','花城大道12号','广州市','广东省')

注意上面插入语句我们没有插入ID,因为它可以自动补充。我们看一下插入后的结果

SQL基础知识V2——自增长列

可以看到系统自动为我们补充上了一个为1的ID。


若要以其他值开始AUTO_INREMENT序列,请使用以下SQL语法:

ALTER TABLE Persons AUTO_INCREMENT=100

要在 "Persons" 表中插入新记录,我们不需要为"ID"栏指定值(自动添加唯一值):

INSERT INTO Persons (姓名,地址,城市,省份)
VALUES ('李四','花城大道22号','广州市','广东省')

我们可以看一下结果

SQL基础知识V2——自增长列

上面的SQL语句在 "Persons" 表中插入一个新记录。“ID”栏将得到唯一值100,因为我们刚才把它的起始值改成了100,所以系统ID默认从100开始。


SQL Server中的自增长列

以下SQL语句将 "Persons" 表中的“ID”列定义为自动递增主键字段:

CREATE TABLE Persons
(
ID int IDENTITY(1,1),
姓名 varchar(255) NOT NULL,
地址 varchar(255),
城市 varchar(255),
省份 varchar(255)
)

MS SQL Server使用IDENTITY关键字执行自动增量任务。

在上面的示例中,IDENTITY的起始值为1,每个新记录增量为1。

比如我们往Persons表中插入一条记录

INSERT INTO Persons(姓名,地址,城市,省份)
VALUES ('王五','江夏路23号','武汉市','湖北省')

注意上面插入语句我们没有插入ID,因为它可以自动补充。我们看一下插入后的结果

SQL基础知识V2——自增长列

如果我们指定“ID”列以10开头,并递增5,将标识( identity )更改为IDENTITY(10,5),请使用如下SQL进行修改:

ALTER TABLE Persons DROP COLUMN ID
ALTER TABLE  Persons ADD  ID INT IDENTITY(10,5)

这里是将ID列先删除再重新赋值,我们插入一条数据

INSERT INTO Persons(姓名,地址,城市,省份)
VALUES ('赵六','北京路23号','上海市','上海市')

我们看下结果:

SQL基础知识V2——自增长列

此外如果只是修改起始值,而不修改步长,我们可以使用下面比较简便的SQL进行修改:

DBCC CHECKIDENT('table_name',RESEED,init_value)

我们将上面的Persons的起始ID再改成30

DBCC CHECKIDENT('Persons',RESEED,30)

修改后再插入两条数据进去,

INSERT INTO Persons(姓名,地址,城市,省份)
VALUES ('宋一','北京路26号','上海市','上海市')
INSERT INTO Persons(姓名,地址,城市,省份)
VALUES ('刘二','北京路29号','上海市','上海市')

我们看下结果:

SQL基础知识V2——自增长列

从上面可以看出起始值已经被重置了,但是它不会以重置的起始值开始赋值,而是以它后面一个开始。


Oracle中的自增长列

您必须使用序列( sequence )对象(该对象生成数字序列)创建自动增量字段。

使用以下CREATSEQUENT语法:

CREATE SEQUENCE seq_person
MINVALUE 1
START WITH 1
INCREMENT BY 1
CACHE 10

上面的代码创建了一个名为seq_pean的序列( sequence) 对象,它以1开头,以1递增。此对象缓存10个值以提高性能。缓存选项指定要存储多少序列值以提高访问速度。

要在"Persons" 表中插入新记录,我们必须使用nextval函数,该函数从seq_hor序列检索下一个值:

INSERT INTO Persons (ID,姓名,城市)
VALUES (seq_person.nextval,'张三','上海市')

相比其他数据库,Oracle这里需要指明ID的值,就是seq_person.nextval,每当插入新的数据它就会在上一条的基础上自动增长。


批注

自增长列在每个数据库中基本都会使用到,用途一般是作为主键,让系统自动给它赋值,但是也要注意自增长列是有上限的,当数据量达到上限后会停止增长,这个时候就需要重置当前的自增长列了。


上一篇:SQL基础之 时间戳


下一篇:《Web前端开发最佳实践》——3.6 添加JavaScript禁用的提示信息