Advertisement

mysql自动增长 sql,SQL基础知识V2——自增长列

阅读量:

SQL专栏

SQL数据库基础知识汇总

SQL数据库高级知识汇总

自增长列的作用

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

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

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

MySQL中的自增长列

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

该SQL语句将 "Persons" 表中的 "ID" 列指定为主键字段,并且该主键字段具有自动生成增量的能力。

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字段 因为系统会自动填充缺失的字段 我们可以观察到修改后的情况

33dbe850c263ceb9945c8e62b9326944.png

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

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

ALTER TABLE Persons AUTO_INCREMENT=100

为了在 "Persons" 表中新增一条记录,请注意无需在 "ID" 列字段中手动赋值

INSERT INTO Persons (姓名,地址,城市,省份)

VALUES ('李四','花城大道22号','广州市','广东省')

我们可以看一下结果

2efd400807435c16a869b46bfc73095c.png

此SQL语句将在'Persons'表中新增一条记录。其中'ID'列将赋值唯一编号100。由于我们将其初始值设为100,因此系统中的所有新记录都将从编号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字段, 因为该字段具有自动生成的能力

67bf0f61980ebf05ee6c3849778b691f.png

如果我们将"ID"列设置为从10开始,并递增至数值5,则标识(identity)将被命名为IDENTITY(起始值)。请根据以下SQL执行此操作:

ALTER TABLE Persons DROP COLUMN ID

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

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

INSERT INTO Persons(姓名,地址,城市,省份)

VALUES ('赵六','北京路23号','上海市','上海市')

我们看下结果:

5813d956ed95108ee7baba2a01f7bc0a.png

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

我们看下结果:

137b031e632b9bf871d01e7cc0cb9fe8.png

从上面可以看出, 起始值已被重新设置为零点, 并未将其作为赋值起点使用; 而是采用了其后一位的数据作为新的初始值

Oracle中的自增长列

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

使用以下CREATSEQUENT语法:

CREATE SEQUENCE seq_person

MINVALUE 1

START WITH 1

INCREMENT BY 1

CACHE 10

上面的代码生成了一个名为seq_pean的序列实例。该序列对象从数值1开始,并按增量为1的方式递增。该序列对象采用了缓存机制,并存储了前十个数值以优化运行效率。设置缓存选项时指定要存储多少个序列值将有助于提升数据处理速度。

为了在Persons表中添加新条目, 必须由nextval函数来获取下一个值

INSERT INTO Persons (ID,姓名,城市)

VALUES (seq_person.nextval,'张三','上海市')

与其它数据库相比,在Oracle中这里需要用seq_person.nextval来指定ID值,并且每次插入新数据时会自动递增。

批注

每个数据库中都会有自增长列被使用,并且其主要作用通常是作为主键字段来唯一标识记录。然而需要注意的是,在达到一定数据量后会出现问题,在这种情况下就需要对当前的自增列表进行重置操作。具体来说,在数据量超过设定的最大值之后就不会继续增加数值了,在发现这一现象时应该立即采取措施将该自增长列重置回去。

全部评论 (0)

还没有任何评论哟~