亚洲 卡通 欧美 制服 中文,午夜在线看的免费网站,黑人太大了太深了好痛 视频,国产乱妇乱子视频在播放

廣州總部電話:020-85564311
20年
互聯(lián)網(wǎng)應(yīng)用服務(wù)商
廣州總部電話:020-85564311
20年
互聯(lián)網(wǎng)應(yīng)用服務(wù)商
請(qǐng)輸入搜索關(guān)鍵詞
知識(shí)庫 知識(shí)庫

優(yōu)網(wǎng)知識(shí)庫

探索行業(yè)前沿,共享知識(shí)寶庫

面試官:MySQL 自增 ID 超過 int 最大值怎么辦?

發(fā)布日期:2025-08-09 17:16:37 瀏覽次數(shù): 814 來源:Java面試那些事兒
推薦語
MySQL自增ID即將突破int上限?運(yùn)維小哥的實(shí)戰(zhàn)解決方案來了!

核心內(nèi)容:
1. 自增ID達(dá)到int上限的嚴(yán)重后果與預(yù)警機(jī)制
2. 從int升級(jí)到bigint的分步操作指南
3. 在線遷移方案與風(fēng)險(xiǎn)規(guī)避技巧
小優(yōu) 網(wǎng)站建設(shè)顧問
專業(yè)來源于二十年的積累,用心讓我們做到更好!

唉,前几天刚好在公司茶水间碰到我们运维小王,他跟我吐槽,说他们有个老系统快上线十年了,最近业务激增,数据库里的那个自增ID,眼看就要撞上 int 最大值了。小王特别头疼,跑过来问我,哥,面试有个经典问题:“MySQL 自增ID超过int最大值咋办?”他怕到时候生产环境直接翻车,被老板逮住就凉了。

其实这个场景真的不是啥小概率,你看国内很多老项目,都喜欢表主键用 int 类型,MySQL 里的自增主键 AUTO_INCREMENT 默认类型也是 int(11),最大也就21亿多点(准确说是 2147483647),流量上来几年真够呛。

我当时正在泡茶,手上一杯铁观音,还差点没拿稳。想了一下就跟他说,你要真等撞线,业务那边新单插不进去了,SQL 报错啥的,整个服务都挂掉,出事基本没法挽救,用户体验直接负分。你说是不是,所以提前预警最重要。

聊到解决方案,其实最常见的就是把自增主键的类型从 int 升级到 bigint,因为 bigint 最大可以到 9223372036854775807,真够一般公司用一辈子的,别说你们公司,马老板的业务也够撑很久。

不过实际操作,怎么升?你直接改表结构肯定不现实啊,有些几千万、上亿条数据,alter table 一跑就是几小时,搞不好线上直接锁表,业务全卡死,这锅你背不动。所以得分几步走:

先给表加个新字段,比如叫 id_bigint,类型是 bigint unsigned,千万记得 unsigned,否则你正好一半空间白给。

ALTER TABLE your_table ADD COLUMN id_bigint BIGINT UNSIGNED;

然后用脚本把老的 int 主键值同步到新字段:

UPDATE your_table SET id_bigint = id;

这一块你最好分批 update,别一次全跑爆了。

再接下来,你要把所有用到老 id 的地方,全都改成用新字段。这个事有点繁琐,什么业务代码、接口、甚至别的表的外键,都得挨个过一遍。我有次跟我们组的小李一起改了整整一晚上,到凌晨一点还在查漏补缺。

等所有地方都改好了,新的主键用上了,测试一遍没问题,再把老的 int 字段主键和自增都取消掉,然后把 bigint 字段升成主键+自增:

ALTER TABLE your_table DROP PRIMARY KEYDROP COLUMN idCHANGE COLUMN id_bigint id BIGINT UNSIGNED NOT NULL AUTO_INCREMENT, ADD PRIMARY KEY(id);

但其实很多公司会选择直接建新表,把历史数据全量迁移过去。这样有个好处,回滚啥的都容易,毕竟线上业务不能停啊。大不了用 pt-online-schema-change 这种工具在线改表,不过也有风险,别说我没提醒你。

我给小王举了个 Java 场景,他比较懂这个。你比如说你用 JPA 或 MyBatis 这种框架,实体类主键类型本来是 int 的,你也得全改成 long,不然取出来直接溢出。比如:

// 老代码
private Integer id;

// 新代码
private Long id;

不改,数据量大了就 GG。

对了,有朋友问那种雪花算法的分布式ID要不要用?其实这玩意儿也挺香的,你不用自增ID,改用全局唯一的 long 型ID,什么 leaf、twitter的 snowflake 实现都有。优点是不用担心自增撞线,缺点就是业务要接受长ID,不再是连续递增那种。

其实你们有时候还得注意一点,MySQL 的 int(11) 这个“11”不是数据范围,是显示宽度,跟最大值没关系,别被这个坑了。

最后小王问我要不要一开始就用 bigint?我说这看业务量,如果你才刚起步,量小,int 足够了,等真到快不够用再升,虽然听着有点鸵鸟,但现实就是这样,大公司有历史包袱,能不动就不动。要是真的新项目,建议直接上 bigint,省得后面折腾。


優(yōu)網(wǎng)科技,優(yōu)秀企業(yè)首選的互聯(lián)網(wǎng)供應(yīng)服務(wù)商

優(yōu)網(wǎng)科技秉承"專業(yè)團(tuán)隊(duì)、品質(zhì)服務(wù)" 的經(jīng)營理念,誠信務(wù)實(shí)的服務(wù)了近萬家客戶,成為眾多世界500強(qiáng)、集團(tuán)和上市公司的長(zhǎng)期合作伙伴!

優(yōu)網(wǎng)科技成立于2001年,擅長(zhǎng)網(wǎng)站建設(shè)、網(wǎng)站與各類業(yè)務(wù)系統(tǒng)深度整合,致力于提供完善的企業(yè)互聯(lián)網(wǎng)解決方案。優(yōu)網(wǎng)科技提供PC端網(wǎng)站建設(shè)(品牌展示型、官方門戶型、營銷商務(wù)型、電子商務(wù)型、信息門戶型、微信小程序定制開發(fā)、移動(dòng)端應(yīng)用(手機(jī)站、APP開發(fā))、微信定制開發(fā)(微信官網(wǎng)、微信商城、企業(yè)微信)等一系列互聯(lián)網(wǎng)應(yīng)用服務(wù)。


我要投稿

姓名

文章鏈接

提交即表示你已閱讀并同意《個(gè)人信息保護(hù)聲明》

專屬顧問 專屬顧問
掃碼咨詢您的優(yōu)網(wǎng)專屬顧問!
專屬顧問
馬上咨詢
聯(lián)系專屬顧問
聯(lián)系專屬顧問
聯(lián)系專屬顧問
掃一掃馬上咨詢
掃一掃馬上咨詢

掃一掃馬上咨詢

和我們?cè)诰€交談!