返回顶部
首页 > 资讯 > 数据库 >mysql自增长id用完了该如何解决
  • 913
分享到

mysql自增长id用完了该如何解决

2023-06-29 03:06:13 913人浏览 八月长安
摘要

本篇内容介绍了“mysql自增长id用完了该如何解决”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!Mysql自增长id用完了,怎么办?作为一

本篇内容介绍了“mysql自增长id用完了该如何解决”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!

Mysql自增长id用完了,怎么办?

作为一名程序员,在求职面试时,不知你有没有遇到类似这样的问题。

张工是一名java程序员,最近到一家互联网公司面试,面试官就问了他这样的一个问题。

面试官:"用过mysql吧,你们数据表主键id是用自增主键还是UUID?"   

张工:"用的是自增主键"    

面试官:"为什么是自增主键?"    

张工:"因为采用自增主键,数据在物理结构上是顺序存储,性能好"    

面试官:"那自增主键达到最大值了,用完了怎么办?"    

张工:“用完了就用完了,再申请呗”

面试官:“你可以回去等通知了”

今天我们就来谈一谈,这个自增主键用完了该怎么办?

在mysql,int整型的范围如下int的取值范围为:-2^31——2^31-1,即-2147483648—2147483647

如图:

mysql自增长id用完了该如何解决

以无符号整型为例,存储范围为0~4294967295,约43亿。当自增id达到最大值时,这是继续插入会出现什么异常呢,

我们来动手实践下。

首先,创建一张表tb_user,这张表只包含一个自增id

create table  tb_user(id int unsigned auto_increment primary key) ;

然后向这张表插入一条数据:

insert into tb_user values(null);

通过show命令show create table tb_user;查看表情况:

CREATE TABLE `tb_user` (  `id` int(10) unsigned NOT NULL AUTO_INCREMENT,  PRIMARY KEY (`id`)) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8

细心的你会发现 AUTO_INCREMENT 已经变成2,不过这离最大值4294967295远着呢,要想让它变成4294967295得插入非常多的记录,其实不用这么麻烦,我们可以在创建表的时候,直接声明AUTO_INCREMENT的初始值。

把我们刚才的创建表语句调整下,先把刚才的表删除掉,然后在创建表时加上auto_increment = 4294967295

create table tb_user(id int unsigned auto_increment primary key) auto_increment = 4294967295;

 然后同样往表插入一条记录

insert into tb_user values(null);

同样,我们通过show命令,查看表tb_user的表结构:

CREATE TABLE `tb_user` (  `id` int(10) unsigned NOT NULL AUTO_INCREMENT,  PRIMARY KEY (`id`)) ENGINE=InnoDB AUTO_INCREMENT=4294967295 DEFAULT CHARSET=utf8

通过

select * from tb_user

我们查询到id 为4294967295,已经是最大值,这时候如果再

当想往表在尝试插入一条数据时,报一个主键冲突异常如下所示。

[SQL]insert into tb_user values(null);[Err] 1062 - Duplicate entry '4294967295' for key 'PRIMARY'

这可以说明,当再次插入时,使用的自增ID还是4294967295,就会报主键冲突的异常了。

4294967295,这个数字已经可以应付大部分的场景了,如果你的服务会经常性的插入和删除数据的话,还是存在用完的风险。

建议采用bigint unsigned,这个数字就大了。

那有什么办法解决,答案是肯定的,解决方法也是很简单的,将Int类型改为BigInt类型,BigInt的范围如下

-2^63-1到2^63-1

-9223372036854775808  9223372036854775807

mysql自增长id用完了该如何解决

就算每秒往数据表插入10000条数据,运行100年,来看看数据量有多少

10000*24*3600*365*100=31536000000000

这数字距离BigInt的上限还差的远,因此你将自增ID设为BigInt类型,就可以解决问题了。

如果你在面试中是这样回答面试官的。

你:"这还不简单,把自增主键的类型改为BigInt类型就可以解决了!"

面试官:"你在线上怎么修改列的数据类型的?"   

你:"alter table tb_user change id  id bigint;"

面试官:“你有实际操作经验吗?”

你:“…………没有实际操作过”

需要注意的是,这种方式在myl5.6+才开始支持,mysql支持在线修改数据库表,在修改表的过程中,对绝大部分操作,原表可读,也可以写。

对于修改数据类型这种操作,是不支持并发的DML操作!也就是说,如果你直接使用alter这样的语句在线修改表数据结构,会导致这张表无法进行更新类操作(delete、update、insert)。所以,想在生产线上执行修改表结构这样的方案是不可行的。

那有没有更好的方式,对于这个问题,我们以后再做讨论。

不知你有没有留意到这样一种情况,虽然主键自增ID是从0开始的,也就是说,现在可以用的范围为0~2147483647,但实际数据中有些id的值并不是连续的。

要是实际生产表出现单表超过上亿的数据量了,这时候想再往数据表写数据,性能肯定是受影响了,得赶紧考虑分库分表了。

一旦分库分表了,我们就不能依赖于每个表的自增id来全局唯一标识这些数据了。此时,我们就需要提供一 个全局唯一的id号生成策略来支持分库分表的环境。

所以在实际中,根本等不到自增主键用完的情况。

较友好的回答不妨参考这样的

面试官:"那自增主键达到最大值了,用完了怎么办?"   

你:这问题没遇到过,因为自增主键我们用int类型,一般达不到最大值,就要考虑分表分库了。

要是面试官穷追不舍,继续问你有关分库分表的要点,你也就可以针对性地回答,说明你完全有这方面的开发经验,相信能为这次面试加分。

“mysql自增长id用完了该如何解决”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注编程网网站,小编将为大家输出更多高质量的实用文章!

您可能感兴趣的文档:

--结束END--

本文标题: mysql自增长id用完了该如何解决

本文链接: https://lsjlt.com/news/322330.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • mysql自增长id用完了该如何解决
    本篇内容介绍了“mysql自增长id用完了该如何解决”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!mysql自增长id用完了,怎么办?作为一...
    99+
    2023-06-29
  • mysql自增长id用完了该怎么办
    mysql自增长id用完了,怎么办? 作为一名程序员,在求职面试时,不知你有没有遇到类似这样的问题。 张工是一名java程序员,最近到一家互联网公司面试,面试官就问了他这样的一个问题...
    99+
    2024-04-02
  • MySQL自增ID用完了如何解决
    本篇文章为大家展示了MySQL自增ID用完了如何解决,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。首先,创建一个最简单的表,只包含一个自增id,并插入一条数据。cr...
    99+
    2024-04-02
  • 如何解决MySQL自增ID用完的问题
    本篇内容介绍了“如何解决MySQL自增ID用完的问题”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!自增id...
    99+
    2024-04-02
  • MySQL的自增ID(主键) 用完了的解决方法
    在 MySQL 中用很多类型的自增 ID,每个自增 ID 都设置了初始值。一般情况下初始值都是从 0 开始,然后按照一定的步长增加(一般是自增 1)。一般情况下,我们都是用int(11)来作为数据表的自增 ID,在 ...
    99+
    2022-05-10
    MySQL 自增ID MySQL 主键 MySQL 自增ID用完
  • MybatisPlus使用@TableId主键id自增长无效如何解决
    这篇文章主要介绍“MybatisPlus使用@TableId主键id自增长无效如何解决”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“MybatisPlus使用@TableId主键id自增长无效如何解...
    99+
    2023-07-06
  • phpmyadmin如何设置id自增长
    小编给大家分享一下phpmyadmin如何设置id自增长,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!phpmyadmin创建数据表时,设置主键自增长,只需一步,如下,我们只需要将A_I下...
    99+
    2024-04-02
  • 如何理解mysql自增长列
    本篇文章给大家分享的是有关如何理解mysql自增长列,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。 自增长列必须是...
    99+
    2024-04-02
  • MybatisPlus使用@TableId主键id自增长无效的解决
    目录问题情况:原因:解决方法问题情况: 在使用 @TableId(type = IdType.AUTO)之后添加的id数字特别大 原因: 因为在第一次使用的时候没有加注解 所以my...
    99+
    2023-05-15
    MybatisPlus @TableId主键id自增长 MybatisPlus @TableId主键id
  • Mysql如何设置id自增
    (1)设置自增 方案一: CREATE TABLE IF NOT EXISTS user( id INT UNSIGNED AUTO_INCREMENT, name VARCHAR(100) NOT NULL, sex VARCH...
    99+
    2023-08-17
    mysql 数据库 java linux nio
  • Mysql自增id冲突怎么解决
    Mysql自增id冲突通常是由于插入数据时出现了并发操作导致的。为了解决这个问题,可以采取以下几种方法:1. 使用事务:在插入数据时...
    99+
    2023-10-23
    Mysql
  • mysql自增id不连续怎么解决
    这篇文章主要介绍“mysql自增id不连续怎么解决”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“mysql自增id不连续怎么解决”文章能帮助大家解决问题。 ...
    99+
    2024-04-02
  • mysql自动增长如何设置
    要设置MySQL表中的自动增长字段,可以使用AUTO_INCREMENT关键字。下面是一个示例: CREATE TABLE exam...
    99+
    2024-04-12
    mysql
  • phpmyadmin如何创建表和设置id user自增长
    这篇文章将为大家详细讲解有关phpmyadmin如何创建表和设置id user自增长,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。一、phpmyadmin表的创建1、首先...
    99+
    2024-04-02
  • mysql id自增冲突问题怎么解决
    解决MySQL ID自增冲突问题有以下几种方法: 使用AUTO_INCREMENT:在创建表的时候,可以设置ID字段为AUTO_...
    99+
    2024-04-09
    mysql
  • 如何解决Mysql更新自增主键id遇到的问题
    这篇文章主要为大家展示了“如何解决Mysql更新自增主键id遇到的问题”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“如何解决Mysql更新自增主键id遇到的问题”这篇文章吧。为什么要更新自增id...
    99+
    2023-06-21
  • mysql如何设置自增id的条件
    mysql如何设置自增id的条件?这个问题可能是我们日常学习或工作经常见到的。希望通过这个问题能让你收获颇深。下面是小编给大家带来的参考内容,让我们一起来看看吧!mysql设置自增id的条件的方法:1、在建...
    99+
    2024-04-02
  • MySQL自增ID达到上限的解决方法
    MySQL 自增 ID 用完了怎么办?在MySQL中有很多类型的自增ID,每个自增ID都设置了初始值,然后按照一定的步长增加,只要定义了字节长度,那么就会有上限,如果达到上限再次添加,则会报主键冲突错误,解...
    99+
    2024-04-02
  • MySQL分表自增ID问题的解决方法
    这篇文章主要讲解了“MySQL分表自增ID问题的解决方法”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“MySQL分表自增ID问题的解决方法”吧! 当我们对...
    99+
    2024-04-02
  • mysql数据自增ID为2的解决方案
    目录mysql数据自增ID为2问题mysql自增id理解1. 什么是自增id2. 自增id的好处3. 自增id的坏处4. 当自增id用完了怎么办?总结mysql数据自增ID为2问题 查看配置 show variables...
    99+
    2022-12-27
    mysql数据自增ID为2 mysql自增ID mysql自增ID为2
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作