本文介绍: MySQL里有很多自增的id,每个自增id都是定义了初始值,然后不停地往上加步长。虽然自然数是没有上限的,但是在计算机里,只要定义了表示这个数的字节长度,那它就有上限。比如,无 符号整型(unsigned int)是4个字节,上限就是2^32 – 1。
MySQL中自增id用完怎么办?
MySQL里有很多自增的id,每个自增id都是定义了初始值,然后不停地往上加步长。虽然自然数是没有上限的,但是在计算机里,只要定义了表示这个数的字节长度,那它就有上限。比如,无 符号整型(unsigned int)是4个字节,上限就是2^32 – 1。
接下来我们看看MySQL里面的几种自增id,分析下它们的值达到上限之后,会出现什么情况。
一,表定义自增值id
表定义的自增值达到上限后的逻辑是:再次申请下一个id时,得到的值保持不变。
可以看到,第一个insert语句插入数据成功后,这个表的AUTO_INCREMENT没有改变(还是 4294967295),就导致了第二个insert语句又拿到相同的自增id值,再试图执行插入语句,报主键冲突错误。
2^32 – 1(4294967295)不是一个特别大的数,对于一个频繁插入删除数据的表来说,是可能会被用完的。因此在建表的时候你需要考察你的表是否有可能达到这个上限,如果有可能,就应该创 建成8个字节的bigint unsigned。
二,InnoDB系统自增row_id
三,Xid
四,Innodb trx_id
五,thread_id
总结
声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。