数据库自增 ID 用完了会怎样
我在工作中经常会遇到有人问我,数据库表的 ID 是自增的,那么如果 ID 用完了会怎么样?说实话,我一直从事的是政企行业的开发,因为是传统行业,并且数据量基本上增长缓慢,所以到目前为止我还没遇到过自增 ID 用完的情况。因此我连夜做了实验,并编写了这篇文章将结果分享出来。在这里我会从两个方面来分享:有主键和无主键。(全文以 MySQL 为例,因为 MySQL 最常用)
一、有主键
在 MySQL 中 int 类型占 4 个字符,因为自增 ID 大部分都是以 1 开始,所以它的取值范围为 1 到 2^32-1,也就是 1 到 4294967295。首先我们创建一张表,并设置 ID 自增,且从 2147483647 开始。
Tip:2147483647 是 int 类型主键的上线
接着插入一条数据
我们再次插入一条数据,这时 MySQL 会提示错误:
从这里得知,在有主键且主键自增的情况下,ID 达到上限后 MySQL 会报错。
二、无主键
在 MySQL 中如果没有主键,InnoDB 会为我们自动创建一个 row_id,row_id 为 6 字节并且最大长度为 2^48-1。同理我们创建一张表:
接着我们修改 row_id 为 1,并插入 5 条数据
再次修改 row_id 为 281474976710656,并再次插入数据:
最后我们查看所有数据,发现修改 row_id 为上限值钱的 n1 和 n2 被后来插入的 n7 和 n8 数据覆盖了,n6 排在了所有数据的最前面。这是因为 row_id 达到上限后,再次插入数据的话 row_id 会重置为 0,并覆盖前面的数据。
版权声明: 本文为 InfoQ 作者【喵叔】的原创文章。
原文链接:【http://xie.infoq.cn/article/edd5a2bfb38873c1014bf2fc5】。未经作者许可,禁止转载。
评论