搜索

字节面试:MySQL自增ID用完会怎样?

发表于 2025-11-05 03:31:41 来源:全栈开发

在一些中小型项目开发中,字节L自增我们通常会使用自增 ID 来作为主键的面试生成策略,但随着时间的用样推移,数据库的字节L自增信息也会越来越多,尤其是面试使用自增 ID 作为日志表的主键生成策略时,可能很快就会遇到 ID 被用完的用样情况,那么如果发生了这种情况,字节L自增MySQL 又会怎样执行呢?面试

PS:当然,在分库分表的用样场景中,我们通常会使用雪花算法来替代自增 ID,字节L自增但中小型项目开发中,面试使用自增 ID 的用样场景还是比较多的。

1.自增ID

在 MySQL 中,字节L自增如果字段的面试数据类型为整数类型(如 INT、BIGINT 等),用样则可以通过关键字“AUTO_INCREMENT”来设置让当前的字段实现自增,例如以下 SQL:

复制CREATE TABLE example_table ( id INT AUTO_INCREMENT PRIMARY KEY, name VARCHAR(128) );1.2.3.4.

1.1 优点分析

自增 ID 的优点如下:

简单方便,能自动为每行数据分配唯一的标识。对于按顺序插入的数据,服务器托管能很好地反映数据插入的先后顺序。

1.2 缺点分析

自增 ID 的缺点如下:

在数据进行迁移或分库分表时,可能会出现问题,需要特殊处理。如果数据量非常大,可能会达到自增 ID 的上限。存在安全性问题,比如通过自增 ID 可能会推测出一些业务信息。例如,一个电商订单表使用自增 ID 作为主键,可能会被竞争对手通过订单号大致推测出业务量等信息。

2.自增ID用完会怎样?

自增 ID 分为以下两种情况:

图片

一种是主键自增 ID 用完后的情况,另一种是 InnoDB 引擎中未设置主键时使用 row_id 用完后的场景,它们的情况是不一样的,所以我们分开来聊。

2.1 主键自增ID用完

当主键自增 ID 达到上限后,再新增下一条数据时,它的 ID 不会变(还是最大的值),只是此时再添加数据时,免费源码下载因为主键约束的原因,ID 是不允许重复的,所以就会报错提示主键冲突。

我们可以使用以下 SQL 来测试:

复制CREATE TABLE t ( id INT AUTO_INCREMENT PRIMARY KEY, `name` VARCHAR(128) ) auto_increment=2147483647; insert into t(id,`name`) values(null,javacn.site); select * from t; insert into t(id,`name`) values(null,www.javacn.site);1.2.3.4.5.6.7.

以上 SQL 是创建了一个表 t,并且给 t 表的主键 id 设置自增 ID,之后再将表的自增 ID 初始化为 INT(有符号)的最大值 2147483647,然后再添加两条数据。

以上 SQL 的执行结果如下:

图片

从上面的执行结果可以看出:当主键自增 ID 达到上限后,再新增下一条数据时,它的 ID 不会变(还是最大的值),只是此时再添加数据时,因为主键约束的原因,ID 是不允许重复的,所以就会报错提示主键冲突。

2.2 row_id用完

如果表没有设置主键,InnoDB 会自动创建一个全局隐藏的 row_id,亿华云计算其长度为 6 个字节,当 row_id 达到上限后,它的执行流程和主键 ID 不同,它是再次归零,然后重新递增,如果出现相同的 row_id,后面的数据会覆盖之前的数据。

随机为您推荐
版权声明:本站资源均来自互联网,如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

Copyright © 2016 Powered by 字节面试:MySQL自增ID用完会怎样?,全栈开发  滇ICP备2023006006号-32sitemap

回顶部