自增长列的作用
自增长列会在新记录插入表中时生成一个唯一的数字。
我们通常希望在每次插入新记录时自动创建主键字段的值。
我们可以在表中创建一个自动增量字段。
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,因为它可以自动补充。我们看一下插入后的结果
可以看到系统自动为我们补充上了一个为1的ID。
若要以其他值开始AUTO_INREMENT序列,请使用以下SQL语法:
ALTER TABLE Persons AUTO_INCREMENT=100
要在 "Persons" 表中插入新记录,我们不需要为"ID"栏指定值(自动添加唯一值):
INSERT INTO Persons (姓名,地址,城市,省份) VALUES ('李四','花城大道22号','广州市','广东省')
我们可以看一下结果
上面的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,因为它可以自动补充。我们看一下插入后的结果
如果我们指定“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进行修改:
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号','上海市','上海市')
我们看下结果:
从上面可以看出起始值已经被重置了,但是它不会以重置的起始值开始赋值,而是以它后面一个开始。
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,每当插入新的数据它就会在上一条的基础上自动增长。
批注
自增长列在每个数据库中基本都会使用到,用途一般是作为主键,让系统自动给它赋值,但是也要注意自增长列是有上限的,当数据量达到上限后会停止增长,这个时候就需要重置当前的自增长列了。