网易首页 > 网易号 > 正文 申请入驻

如果 MySQL 的自增 ID 用完了,怎么解决?

0
分享至

Java精选面试题 (微信小程序):5000+道面试题和选择题,包含Java基础、并发、JVM、线程、MQ系列、Redis、Spring系列、Elasticsearch、Docker、K8s、Flink、Spark、架构设计、大厂真题等,在线随时刷题!

MySQL的自增ID(Auto Increment ID)是数据库表中最常用的主键类型之一。然而,在一些特定的场景下,例如当表中的数据量非常大或者应用场景特殊时,自增ID可能会达到其最大值。默认情况下,MySQL 的自增ID是一个 BIGINT类型,这种类型的最大值是2^63 - 1,即9223372036854775807,远远超过实际应用中可能达到的数量级。但是,在一些情况下,例如使用了 INT 类型或是数据表长期运行且ID的使用不当时,可能会遇到ID用尽的问题。

解决方案

1. 更改ID列的类型

如果表中的自增ID已经接近上限,可以通过更改列的类型来扩展ID的范围。

从INT扩展到BIGINT:

ALTER TABLE table_name MODIFY id BIGINT UNSIGNED AUTO_INCREMENT;

BIGINT类型提供了更大的数值范围,比INT类型可以支持更大的ID数量。

2. 使用UUID替代自增ID

UUID(通用唯一标识符)是一种具有很高唯一性的标识符,UUID的长度为 128 位,几乎可以保证全局唯一性。使用UUID替代自增ID可以避免ID用尽的问题,但UUID相较于自增ID更长,会对存储和性能产生影响。

生成UUID的示例:

CREATE TABLE table_name (
    id CHAR(36) NOT NULL PRIMARY KEY DEFAULT (UUID()),
    name VARCHAR(255)
);

在插入数据时,UUID会自动生成。

INSERT INTO table_name (name) VALUES ('example_name');

可以使用MySQL提供的UUID() 函数来生成UUID。

3. 分段ID生成策略

这种策略将ID生成分成多个段,每个段由不同的生成策略或不同的表来管理。通过这种方式,可以避免单一表的ID上限问题。

使用不同的表来生成 ID:

维护多个ID生成表,每个表管理一个ID段。例如:

CREATE TABLE id_generator_1 (
    id INT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
    INDEX (id)
);
 
CREATE TABLE id_generator_2 (
    id INT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
    INDEX (id)
);

在插入新数据时,根据需要选择合适的表来生成ID。

4. 使用合成主键

合成主键(Composite Key)是由多个列组合而成的主键。这种方案可以在需要时使用额外的列来生成唯一标识符,从而避免单一列的ID限制。

示例:

CREATE TABLE table_name (
    id INT UNSIGNED AUTO_INCREMENT,
    other_column VARCHAR(255),
    PRIMARY KEY (id, other_column)
);

5. 调整自增步长和偏移量

调整自增列的步长和偏移量,虽然这不能直接解决ID用尽问题,但可以优化ID 的分配和使用效率。

设置步长和偏移量:

ALTER TABLE table_name AUTO_INCREMENT = 1000000;

这将ID从一个新的起始值开始。

6. 数据库分片

数据库分片(Sharding)是将数据分布到多个数据库实例上,从而避免单个数据库的自增ID达到上限的问题。

推荐划水摸鱼地址: https://www.yoodb.com/slack-off/home.html

示例:

将数据分布到多个数据库实例,每个实例有独立的ID生成策略。例如:

CREATE TABLE db1.table_name (
    id INT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
    name VARCHAR(255)
);
 
CREATE TABLE db2.table_name (
    id INT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
    name VARCHAR(255)
);

在应用层选择合适的数据库实例来插入数据。

总结

  • 更改ID列的类型:将INT更改为BIGINT,以提供更大的ID范围。

  • 使用UUID:替代自增ID以避免ID用尽问题,但需要考虑UUID的存储和性能影响。

  • 分段ID生成策略:通过维护多个ID生成表或段来管理ID。

  • 使用合成主键:使用多个列组合成主键,以绕过单一列的限制。

  • 调整自增步长和偏移量:优化自增列的使用。

  • 数据库分片:将数据分布到多个数据库实例上,避免单个数据库的ID限制。

根据实际情况选择合适的方案,以确保系统的可扩展性和数据的唯一性。

作者:每天瞎忙的农民工 https://blog.csdn.net/Crazy_shark/article/details/142054196

公众号“Java精选”所发表内容注明来源的,版权归原出处所有(无法查证版权的或者未注明出处的均来自网络,系转载,转载的目的在于传递更多信息,版权属于原作者。如有侵权,请联系,笔者会第一时间删除处理!

最近有很多人问,有没有读者交流群!加入方式很简单,公众号Java精选,回复“加群”,即可入群!

Java精选面试题(微信小程序):3000+道面试题,包含Java基础、并发、JVM、线程、MQ系列、Redis、Spring系列、Elasticsearch、Docker、K8s、Flink、Spark、架构设计等,在线随时刷题!

特别推荐:专注分享最前沿的技术与资讯,为弯道超车做好准备及各种开源项目与高效率软件的公众号,「大咖笔记」,专注挖掘好东西,非常值得大家关注。点击下方公众号卡片关注

文章有帮助的话,点在看,转发吧!

特别声明:以上内容(如有图片或视频亦包括在内)为自媒体平台“网易号”用户上传并发布,本平台仅提供信息存储服务。

Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.

相关推荐
热点推荐
凯恩乐极生悲!轰世界波后送点,23轮轰28球,打破莱万神纪录

凯恩乐极生悲!轰世界波后送点,23轮轰28球,打破莱万神纪录

奥拜尔
2026-02-22 00:16:52
谷爱凌太耀眼!金色发带闪耀领奖台,解说员:中国女人天生就很强

谷爱凌太耀眼!金色发带闪耀领奖台,解说员:中国女人天生就很强

奥拜尔
2026-02-22 19:33:26
心脏决定寿命,建议中老年人别太节俭,常吃3样,身强体壮更长寿

心脏决定寿命,建议中老年人别太节俭,常吃3样,身强体壮更长寿

江江食研社
2026-02-10 20:30:07
从四川穷山村到冬奥之巅:一对父女跨越两代人的美国梦

从四川穷山村到冬奥之巅:一对父女跨越两代人的美国梦

涛哥锐评
2026-02-21 15:11:52
毛奇、李佩霞2026年近况公布,两人服刑结局给所有人提了醒

毛奇、李佩霞2026年近况公布,两人服刑结局给所有人提了醒

娱乐督察中
2026-02-21 03:23:47
1比4惨败!陈熠遭遇崩盘,状态低迷令人惋惜,网友质疑经验不足

1比4惨败!陈熠遭遇崩盘,状态低迷令人惋惜,网友质疑经验不足

卿子书
2026-02-22 07:18:07
买到太好养活的动物有多崩溃?网友:天天卖不完的鱼

买到太好养活的动物有多崩溃?网友:天天卖不完的鱼

夜深爱杂谈
2026-02-20 23:33:45
周扬青旗袍 “好大好圆”,小猪当年吃的太好了

周扬青旗袍 “好大好圆”,小猪当年吃的太好了

飛娱日记
2026-02-22 07:53:48
急了!印度最近为啥拼命要和中国谈边界?再拖就真没机会了

急了!印度最近为啥拼命要和中国谈边界?再拖就真没机会了

趣生活
2026-02-16 20:18:37
3金3银!谷爱凌6枚冬奥奖牌追平王濛,并列中国运动员第一

3金3银!谷爱凌6枚冬奥奖牌追平王濛,并列中国运动员第一

懂球帝
2026-02-22 19:49:11
2.22今日金价:大家不必等待了!接下来,金价有可能会重演历史!

2.22今日金价:大家不必等待了!接下来,金价有可能会重演历史!

牛锅巴小钒
2026-02-22 19:53:34
广东12处高速路通行缓慢,点位公布!广州明日迎返城最高峰

广东12处高速路通行缓慢,点位公布!广州明日迎返城最高峰

南方都市报
2026-02-22 11:50:06
上海解放后,陈毅让黄金荣扫大街,老蒋知道后缓缓吐露出4个字

上海解放后,陈毅让黄金荣扫大街,老蒋知道后缓缓吐露出4个字

史之铭
2026-01-04 01:09:56
梅艳芳102岁妈妈现身拜年,穿红衣戴翡翠精神好,月领25万生活费

梅艳芳102岁妈妈现身拜年,穿红衣戴翡翠精神好,月领25万生活费

开开森森
2026-02-22 10:37:49
某米员工:过年十几个下属,四个没发祝福。优化两个,绩效都给B-

某米员工:过年十几个下属,四个没发祝福。优化两个,绩效都给B-

蚂蚁大喇叭
2026-02-22 17:48:41
5金4银6铜!中国队创境外冬奥最佳成绩,15枚奖牌追平北京冬奥

5金4银6铜!中国队创境外冬奥最佳成绩,15枚奖牌追平北京冬奥

全景体育V
2026-02-22 19:31:00
茅台卖断货了!2025年库存也清空,网友称22日网上三次放量秒光…

茅台卖断货了!2025年库存也清空,网友称22日网上三次放量秒光…

火山詩话
2026-02-22 16:50:51
贝加尔湖事故遇难者6女1男生还者为12岁女孩父亲 都是自由行惹的祸

贝加尔湖事故遇难者6女1男生还者为12岁女孩父亲 都是自由行惹的祸

劲爆体坛
2026-02-22 19:18:10
中国第一监狱:关的几乎全是高官,为防止泄密,牢房内有特殊布置

中国第一监狱:关的几乎全是高官,为防止泄密,牢房内有特殊布置

瓦伦西亚月亮
2026-02-20 17:37:18
Coco说她很怀念在香港的日子,很怀念和谢贤在一起的12年

Coco说她很怀念在香港的日子,很怀念和谢贤在一起的12年

西楼知趣杂谈
2026-02-19 21:09:49
2026-02-22 22:36:49
Java精选
Java精选
一场永远也演不完的戏
1772文章数 3859关注度
往期回顾 全部

科技要闻

马斯克:星舰每年将发射超过10000颗卫星

头条要闻

中国游客与贝加尔湖8死事故擦肩而过:曾踩过出事冰缝

头条要闻

中国游客与贝加尔湖8死事故擦肩而过:曾踩过出事冰缝

体育要闻

自由式滑雪U型池 谷爱凌成功卫冕

娱乐要闻

裴世矩养侄为刃 看懂两次放行裴行俨!

财经要闻

特朗普新加征关税税率从10%提升至15%

汽车要闻

续航1810km!smart精灵#6 EHD超级电混2026年上市

态度原创

房产
手机
游戏
艺术
公开课

房产要闻

窗前即地标!独占三亚湾C位 自贸港总裁行宫亮相

手机要闻

消息称苹果计划7月启动iPhone Fold与18 Pro大规模量产,两款机型预计同步发售

2026年迎财神大赛,冠军是爆出茅台的传奇玩家!

艺术要闻

冷军:超小幅名人肖像油画新作

公开课

李玫瑾:为什么性格比能力更重要?

无障碍浏览 进入关怀版