您当前的位置:首页 > 电脑百科 > 数据库 > MYSQL

MySQL自增主键id用完了怎么办?

时间:2023-01-17 14:08:05  来源:今日头条  作者:程序员拾山

前几天有个朋友出去面试,被面试官问到MySQL自增主键id用完了怎么办?由于对这块了解不多,所以回答得不太理想。

本篇文章为大家分享一下,MySQL自增主键达到上限以后会发生什么情况?该如何解决这种情况?

我们在定义MySQL表时,为了性能考虑,一般会使用MySQL的自增主键id,每个自增id都会定义一个初始值,一般从1开始,然后不停得增加步长(不配置的话步长默认为1)。

但是不知道大家考虑过没有,我们定义的int或者bigint都是有长度上限的。

如果表中的最大记录id超过这个上限值,MySQL会发生什么错误呢?


 

从上图可以看出,tinyint和smallint的范围都比较小,我们一般不会将其作为主键id的类型。

如果主键采用有符号int类型进行自增,那么id的最大值是2147483647,如果采用无符号int类型进行自增,那么id的最大值是4294967295。

以无符号int类型为例,42亿虽然看起来是个很大的数字,但是对于一些插入删除很频繁的业务来说,并非无法触达这个上限。

特别是有的业务表设置的步长比较大,会导致id自增的速度更快。

首先,我们来验证一下,当MySQL的自增主键达到最大值后,再往表中插入数据会出现什么现象?

新建一张表,并且直接指定最大自增值为4294967295。

CREATE TABLE t_max( id int unsigned auto_increment PRIMARY KEY ) auto_increment = 4294967295;

执行几次以下sql看看会出现什么结果。

INSERT t_max ( id ) VALUES ( NULL );

可以看到,直接提示主键重复了。


 

这里我们也可以验证MySQL的主键策略:id自增值达到上限以后,再申请下一个 id 时,仍然是最大值。

所以,如果你的业务预期会产生很多数据,那么建议你在创建表时,直接使用bigint,无符号的bigint最大值是18446744073709551615,这个数基本可以保证你的业务不受影响了。

当然,如果主键需要对外展示,为了安全考虑,大家也可以采用雪花算法生成的主键值,雪花算法产生的值和bigint一样都占用8个字节,并且是大致递增的,对性能也不会产生影响。

另外多说几句,建表时采用什么类型的主键,还是要根据具体业务具体分析,合理的主键类型会占用更小的空间,具有更好的性能。毕竟bigint占用8个字节,比int多了一倍呢。



Tags:MySQL   点击:()  评论:()
声明:本站部分内容及图片来自互联网,转载是出于传递更多信息之目的,内容观点仅代表作者本人,如有任何标注错误或版权侵犯请与我们联系(Email:2595517585@qq.com),我们将及时更正、删除,谢谢。
▌相关推荐
前几天有个朋友出去面试,被面试官问到MySQL自增主键id用完了怎么办?由于对这块了解不多,所以回答得不太理想。本篇文章为大家分享一下,MySQL自增主键达到上限以后会发生什么情况...【详细内容】
2023-01-17  Tags: MySQL  点击:(0)  评论:(0)  加入收藏
我们通常会遇到这样的一个场景,就是需要将一个数据库的数据迁移到一个性能更加强悍的数据库服务器上。这个时候需要我们做的就是快速迁移数据库的数据。那么,如何才能快速地迁...【详细内容】
2023-01-13  Tags: MySQL  点击:(3)  评论:(0)  加入收藏
译者 | 陈峻不知您是否发现一种现象,那些初学渗透测试的人员往往过于关注应用的安全性,而对数据库的安全性不太重视。他们殊不知,没有数据库的配置与安全测试,应用的安全性也就...【详细内容】
2023-01-12  Tags: MySQL  点击:(12)  评论:(0)  加入收藏
最近业主要求要把系统从电信云迁移到区里面的政数云,迁移前电信云是8核16G的配置,迁移后政数云是32核32G的配置,按理说迁移后性能应该非常好,结果老是系统崩溃,查找原因是mysql占...【详细内容】
2023-01-11  Tags: MySQL  点击:(10)  评论:(0)  加入收藏
我们在操作数据库的时候,锁的冲突是影响数据库并发访问性能的一个非常重要因素,从这一角度来说,锁对于数据库而言就显得尤为重要。今天分享MySQL相关的最全锁@mikechen01MySQ...【详细内容】
2023-01-05  Tags: MySQL  点击:(23)  评论:(0)  加入收藏
前言先前写过一篇文章聊聊如何利用redis实现多级缓存同步,里面讲到业务部门因数据库宕机,有技术提出当数据库宕机,切换到redis,今天我们就来聊聊如何触发这个切换动作?1、方案一...【详细内容】
2023-01-04  Tags: MySQL  点击:(10)  评论:(0)  加入收藏
历史数据迁移 项目地址:https://gitee.com/xl-echo/dataMigration历史迁移解决方案。微服务的架构为基础,使用多种设计模式,如:单利、桥接、工厂、模板、策略等。其中涉及的核心...【详细内容】
2023-01-04  Tags: MySQL  点击:(18)  评论:(0)  加入收藏
mysql锁可能是数据库知识篇幅中普遍比较难理解的一个知识点!以前对锁理解的也是停留在八股文的的阶段,经历了这次生产问题之后重新学习了问题表现:早上刚到公司还没进入状态,就...【详细内容】
2023-01-03  Tags: MySQL  点击:(5)  评论:(0)  加入收藏
今天在工作中写项目的时候,遇到了一个让我感到几乎无解的问题,在转换了思路后,想出了一个折中的解决方案,记录如下。其实,问题的场景,非常简单: 就是需要查询出上图的数据,红框是从...【详细内容】
2022-12-24  Tags: MySQL  点击:(28)  评论:(0)  加入收藏
这篇文章主要介绍了navicat打开sql的方法,具有一定借鉴价值,需要的朋友可以参考下。希望大家阅读完这篇文章后大有收获。下面让小编带着大家一起了解一下。navicat怎么打开sql...【详细内容】
2022-12-22  Tags: MySQL  点击:(17)  评论:(0)  加入收藏
▌简易百科推荐
前几天有个朋友出去面试,被面试官问到MySQL自增主键id用完了怎么办?由于对这块了解不多,所以回答得不太理想。本篇文章为大家分享一下,MySQL自增主键达到上限以后会发生什么情况...【详细内容】
2023-01-17  程序员拾山  今日头条  Tags:MySQL   点击:(0)  评论:(0)  加入收藏
我们通常会遇到这样的一个场景,就是需要将一个数据库的数据迁移到一个性能更加强悍的数据库服务器上。这个时候需要我们做的就是快速迁移数据库的数据。那么,如何才能快速地迁...【详细内容】
2023-01-13    CSDN  Tags:MySQL   点击:(3)  评论:(0)  加入收藏
译者 | 陈峻不知您是否发现一种现象,那些初学渗透测试的人员往往过于关注应用的安全性,而对数据库的安全性不太重视。他们殊不知,没有数据库的配置与安全测试,应用的安全性也就...【详细内容】
2023-01-12    51CTO  Tags:MySQL   点击:(12)  评论:(0)  加入收藏
最近业主要求要把系统从电信云迁移到区里面的政数云,迁移前电信云是8核16G的配置,迁移后政数云是32核32G的配置,按理说迁移后性能应该非常好,结果老是系统崩溃,查找原因是mysql占...【详细内容】
2023-01-11  中中中中中中  今日头条  Tags:MYSQL   点击:(10)  评论:(0)  加入收藏
我们在操作数据库的时候,锁的冲突是影响数据库并发访问性能的一个非常重要因素,从这一角度来说,锁对于数据库而言就显得尤为重要。今天分享MySQL相关的最全锁@mikechen01MySQ...【详细内容】
2023-01-05  互联网资讯看板     Tags:MySQL锁   点击:(23)  评论:(0)  加入收藏
前言先前写过一篇文章聊聊如何利用redis实现多级缓存同步,里面讲到业务部门因数据库宕机,有技术提出当数据库宕机,切换到redis,今天我们就来聊聊如何触发这个切换动作?1、方案一...【详细内容】
2023-01-04  小心程序猿QAQ  今日头条  Tags:mysql   点击:(10)  评论:(0)  加入收藏
历史数据迁移 项目地址:https://gitee.com/xl-echo/dataMigration历史迁移解决方案。微服务的架构为基础,使用多种设计模式,如:单利、桥接、工厂、模板、策略等。其中涉及的核心...【详细内容】
2023-01-04  Java机械师  今日头条  Tags:MySQL   点击:(18)  评论:(0)  加入收藏
mysql锁可能是数据库知识篇幅中普遍比较难理解的一个知识点!以前对锁理解的也是停留在八股文的的阶段,经历了这次生产问题之后重新学习了问题表现:早上刚到公司还没进入状态,就...【详细内容】
2023-01-03  打篮球的程序员  今日头条  Tags:mysql锁   点击:(5)  评论:(0)  加入收藏
今天在工作中写项目的时候,遇到了一个让我感到几乎无解的问题,在转换了思路后,想出了一个折中的解决方案,记录如下。其实,问题的场景,非常简单: 就是需要查询出上图的数据,红框是从...【详细内容】
2022-12-24  Java架构师修炼之道  今日头条  Tags:MySQL   点击:(28)  评论:(0)  加入收藏
这篇文章主要介绍了navicat打开sql的方法,具有一定借鉴价值,需要的朋友可以参考下。希望大家阅读完这篇文章后大有收获。下面让小编带着大家一起了解一下。navicat怎么打开sql...【详细内容】
2022-12-22  崔永亮  搜狐号  Tags:mysql   点击:(17)  评论:(0)  加入收藏
站内最新
站内热门
站内头条