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

简介: SQL数据库开发

自增长列的作用

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

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

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


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,因为它可以自动补充。我们看一下插入后的结果

90.jpg

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


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

ALTER TABLE Persons AUTO_INCREMENT=100

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

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

我们可以看一下结果

91.jpg

上面的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,因为它可以自动补充。我们看一下插入后的结果

92.jpg

如果我们指定“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号','上海市','上海市')

我们看下结果:

93.jpg

此外如果只是修改起始值,而不修改步长,我们可以使用下面比较简便的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号','上海市','上海市')

我们看下结果:

94.jpg

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


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 关系型数据库 MySQL
MySQL实战基础知识入门(2):统计一天24小时数据默认补0的sql语句
MySQL实战基础知识入门(2):统计一天24小时数据默认补0的sql语句
762 0
|
6月前
|
分布式计算 BI MaxCompute
SQL 能力问题之输出聚合的维度列的名称,如何解决
SQL 能力问题之输出聚合的维度列的名称,如何解决
|
7月前
|
SQL 关系型数据库 分布式数据库
PolarDB产品使用问题之如何查看SQL语句使用的是行索引还是列索引
PolarDB产品使用合集涵盖了从创建与管理、数据管理、性能优化与诊断、安全与合规到生态与集成、运维与支持等全方位的功能和服务,旨在帮助企业轻松构建高可用、高性能且易于管理的数据库环境,满足不同业务场景的需求。用户可以通过阿里云控制台、API、SDK等方式便捷地使用这些功能,实现数据库的高效运维与持续优化。
|
8月前
|
SQL 前端开发
基于jeecgboot复杂sql查询的列表自定义列实现
基于jeecgboot复杂sql查询的列表自定义列实现
86 0
|
8月前
|
SQL Oracle 关系型数据库
Oracle PL/SQL基础知识及应用案例
Oracle PL/SQL基础知识及应用案例
134 0
|
8月前
|
SQL 数据库
SQL标识列实现自动编号的步骤和技巧以及优势
SQL标识列实现自动编号的步骤和技巧以及优势
153 0
|
SQL 关系型数据库 MySQL
sql处理重复的列,更好理清分组和分区
sql处理重复的列,更好理清分组和分区
95 0
|
SQL
一条集多表查询、字段与字段拼接、合并每张表共同字段、新增列并赋值的SQL
一条集多表查询、字段与字段拼接、合并每张表共同字段、新增列并赋值的SQL
74 0
|
SQL 关系型数据库 MySQL
MySQL实战基础知识入门(8):当天和昨天24小时数据统计的sql语句解决方案
MySQL实战基础知识入门(8):当天和昨天24小时数据统计的sql语句解决方案
454 0
MySQL实战基础知识入门(8):当天和昨天24小时数据统计的sql语句解决方案