• [转]Mysql 数据库自增列达到最大值之后怎么办?


    原文:https://www.jianshu.com/p/6815674eacad/

    ------------------

    相信有不少人在面试的时候都会碰到这样的场景!

    面试官:"用过MySQL吧,你们是用自增主键还是UUID?"

    你:"用的是自增主键。"

    面试官:"为什么不用UUID,而用自增主键?"

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

    面试官:"那自增键的最大值是多少?自增键达到最大值了,用完了,你怎么办"

    你:"what,自增键的值能用完?"

    恰好我学弟在面试时也遇到了。我觉得挺有意思的,所以就这个问题。来谈谈“这个自增主键用完了该怎么办!”

    首先我们要清楚一点,在MySQL中Int整型的范围如下:

     
     

    以无符号整型为例,其最大值为:4294967295。大哥,这是约为43亿啊!正常情况下,单表是不可能达到这个值的啊!当然如果频繁的删除或者频繁消耗自增列的值,单表到达42亿也是日可待。

    一旦自增id达到最大值,此时数据继续插入是会报一个主键冲突异常如下所示:

    //Duplicate entry '4294967295' for key 'PRIMARY'

    这时,解决方法也很简单,只需要把 Int 改为 BigInt 。BigInt的范围如下:

     
     

    其最大值:18446744073709551615,好吧!我已经不知道怎么读了。具体用完时间,如下所示:

     
     

    因此,将 Int 改成 BigInt。你根本不用考虑自增长值会达到最大值越界问题。

    当然了。在实际的项目中,我们也不可能这么干。因为数据到达一定的量以后。你每次查询所花费的时间越长,如果还有联合查询的话。不说是亿量级的数据,就算只有几千万,几百万。那程序都有可能死在那儿。

    这个时候你就要考虑分库分表了。一旦分库分表了,就不能依赖于每个表的自增ID来全局唯一标识这些数据了。此时,我们就需要提供一 个全局唯一的ID号生成策略来支持分库分表的环境。同时分库分表 还可以减小数据库的负担,缩短查询时间。

    具体的分库分表策略,你需要关注 【不正经的码农】 回复 【mycat】即可领取教程资料。

    回到面试官的问题:“那自增主键达到最大值了,用完了怎么办?”;

    专业点回答:

    "这问题没遇到过,因为自增主键一般用int类型,一般达不到最大值,我们就分库分表了,所以不曾遇见过!"

    想学习MySQL 的小伙伴们 可关注【不正经的码农】回复【mysql】即可免费领取视频教程+ 课程笔记。



    作者:逝吣
    链接:https://www.jianshu.com/p/6815674eacad/
    来源:简书
    简书著作权归作者所有,任何形式的转载都请联系作者获得授权并注明出处。
  • 相关阅读:
    愚人节,怎么让朋友吃屎(其实我是不想发这么低俗的文章的)
    水往地处流,人往地处走
    不够完美的步骤条(模仿淘宝重新绑定邮箱)
    The Django Book
    The Django Book
    Python 目录和文件基本操作
    The Django Book 第三章 试图和URL配置
    Django 表增加外键
    Linux下文件以及文件名编码转换
    Django添加tinyMCE编辑器
  • 原文地址:https://www.cnblogs.com/oxspirt/p/15702735.html
Copyright © 2020-2023  润新知