MySQL自增主键用完了咋整?

MySQL自增主键会用完吗?我们先来看下在MySQL中,int和bigint两种类型的值域是多少,

类型最小值最大值所占字节
int(有符号)-2^312^314
int(无符号)02^324
bigint(有符号)-2^632^638
bigint(无符号)02^648

当我们使用int(有符号)类型的时候,创建一张表:

create table test_ai (
	id int(10) auto_increment primary key,
	name varchar(11) not null
) engine=InnoDB;

执行两条SQL语句:

insert test_ai(id, name) values(2147483646, 'cc1');
insert test_ai(name) values('cc2');
insert test_ai(name) values('cc3');

当执行到第三句SQL的时候就会报错Duplicate entry '2147483647' for key 'PRIMARY',也就是说当我们的自增主键用完之后,就无法继续往表中新增数据了

解决办法


我们在正常情况下,不会让单表存储那么大的数据量,所以一般不会出现这个问题,如果真的脑抽抽的在一张表中存储那么多数据,或者当数据迁移的时候造成了自增主键混乱,那么我们可以使用bigint(无符号)类型作为自增主键。

使用bigint(无符号)类型时,如果我们每秒插入1W条数据,不间断的跑100年,单表的数据量为:10000 * 3600 * 24 * 365 * 100 = 31536000000000,还远远小于2^64,完全不会被用完,如果操作正确的话。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值