2024-11-09
版权声明:本文为博主付费文章,严禁任何形式的转载和摘抄,维权必究。 本文链接:https://www.skjava.com/mianshi/baodian/detail/1119967887

回答

自增 ID 指定义一个初始值,然后不停地往上加步长的数值字段。虽然自然数是没有上限的,但在计算机中会为字段定义类型,如 id int unsigned,int 占四个字节,那么它就有上限了。对于自增 ID 用完了的场景需要根据实际情况来分析:有主键和无主键

一、表定义的自增 id

当表定义的自增值达到上限后,再申请下一个 id 时,得到的值保持不变。故插入时会提升主键冲突错误。

create table t_test(
  `id` int unsigned auto_increment,
  `name` varchar(255) NOT NULL default '',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB,auto_increment=4294967295;

int 占四个字节,unsigned int 能到的最大值是 232-1(4294967295)。通常情况下是够用了,但在互联网业务频繁插入删除的表中可能会被用完。此时可以将主键 id 创建为 8 个字节的 unsigned bigint

备注:单表 42 亿数据量也是惊人,老早就需要考虑分表了。

二、InnoDB 自增的 Row_id