5

面试突击59:一个表中可以有多个自增列吗? - Java中文社群

 1 year ago
source link: https://www.cnblogs.com/vipstone/p/16399097.html
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

自增列可使用 auto_increment 来实现,当一个列被标识为 auto_increment 之后,在添加时如果不给此列设置任何值,或给此列设置 NULL 值时,那么它会使用自增的规则来填充此列。

PS:本文以下内容基于 MySQL InnoDB 数据库引擎。

默认情况下自增列的值为 1,每次递增 1,比如以下建表 SQL:

create table tab_incre(
    id int primary key auto_increment,
    name varchar(250) not null
);
image.png

我们在添加时,不给自增列 id 设置任何值,它的执行结果如下:

从上述结果可以看出自增列默认值为 1,每次递增 1。

1.手动指定自增值

在创建表的时候可以手动指定自增值,如果不指定自增值,那么它默认会使用 1 作为自增值,手动指定自增值的 SQL 命令如下:

create table tab_incre(
    id int primary key auto_increment,
    name varchar(250) not null
) auto_increment=50;
image.png

使用“show create table table_name”可以查看表中自增列的自增列值,如下图所示:

此表的自增值为 50,我们也可以创建一条数据来验证一下自增值是否为 50,如下图所示:

image.png

2.手动修改自增值

当表创建之后,我们也可以通过 alter 命令来修改自增列的值,它的修改命令如下:

alter table table_name auto_increment=n;

如果要将 tab_incre 表中的自增值修改为 100,可使用以下 SQL 来实现:

当我们试图将自增值设置为比自增列中的最大值还要小的值的时候,自增值会自动变为自增列的最大值 +1 的值,如下图所示:

3.一个表可以有多个自增列吗?

一个表中只能有一个自增列,这和一个表只能有一个主键的规则类似,当我们尝试给一个表添加一个自增列时,可以正常添加成功,如下图所示:

当我们尝试给一个表添加多个自增列时,会提示只能有一个自增列的报错信息,如下图所示:

4.其他注意事项

除了一个表只能添加一个自增列之外,自增列还需要注意以下两个问题。

4.1 自增列只能为整数类型

自增列的字段类型只能为整数类型(TINYINT、SMALLINT、INT、BIGINT 等),如下图所示:

当我们使用其他类型来作为自增列的数据类型时,会提示如下错误:

4.2 必须配合 key 一起使用

auto_increment 必须配合 key 一起使用,这个 key 可以是 primary key 或 foreign key,如果没有 key 就会报错,如下所示:

PS:auto_increment 也可以配合唯一约束 unique 一起使用。

自增列的值默认是 1,每次递增 1,但也可以在创建表的时候手动指定自增值,当然在特殊情况下我们在表被创建之后,也可以通过 alter 修改自增值。一个表中只能有一个自增列,就像一个表中只能有一个主键一样,如果设置多个自增列,那么 SQL 执行就会报错。除此之外还要注意自增列应该为整数类型,且 auto_increment 需要配合 key 一起使用,这个 key 可以是 primary key 或 foreign key。

是非审之于己,毁誉听之于人,得失安之于数。

公众号:Java面试真题解析

面试合集:https://gitee.com/mydb/interview


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK