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(有符号)类型的时候,创建一张表:
1 | create table test_ai ( |
执行两条SQL语句:
1 | insert test_ai(id, name) values(2147483646, 'cc1'); |
当执行到第三句SQL的时候就会报错Duplicate entry '2147483647' for key 'PRIMARY'
,也就是说当我们的自增主键用完之后,就无法继续往表中新增数据了
解决办法
我们在正常情况下,不会让单表存储那么大的数据量,所以一般不会出现这个问题,如果真的脑抽抽的在一张表中存储那么多数据,或者当数据迁移的时候造成了自增主键混乱,那么我们可以使用bigint(无符号)类型作为自增主键。
使用bigint(无符号)类型时,如果我们每秒插入1W条数据,不间断的跑100年,单表的数据量为:10000 * 3600 * 24 * 365 * 100 = 31536000000000,还远远小于2^64,完全不会被用完,如果操作正确的话。