MySQL自增主键用完了咋整
等你点关注都等的长毛了
不知道你在使用MySQL的时候有没有想过这个问题:MySQL自增主键会用完吗?如果用完了,会发生什么事?
我们先来看下在MySQL中,int和bigint两种类型的值域是多少:
类型 |
最小值 | 最大值 | 字节数 |
int(有符号) |
-2^31 |
2^31 |
4 |
int(无符号) |
0 |
2^32 |
4 |
bigint(有符号) |
-2^63 |
2^63 |
8 |
bigint(无符号) |
0 |
2^64 |
8 |
当我们使用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,完全不会被用完,如果操作正确的话。
点击 “在看” 解锁更多!