首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >重置自动增量有什么坏处吗?

重置自动增量有什么坏处吗?
EN

Stack Overflow用户
提问于 2010-01-21 09:06:23
回答 6查看 1.8K关注 0票数 6

我有一亿行,而且越来越大了。我看到了很多差距。(因为我删除、添加、删除、添加。)

我想用自动增量来填补这些空白。如果我真的重置了it..is,有没有harM?

如果我这样做,它会填补空白吗?:

代码语言:javascript
复制
mysql> ALTER TABLE tbl AUTO_INCREMENT = 1;
EN

回答 6

Stack Overflow用户

回答已采纳

发布于 2010-01-21 09:11:00

这可能非常危险,因为您可以再次获取已在使用的数字。

您建议的是再次将序列重置为1。它只会产生1,2,3,4,5,6,7,..以此类推,不管这些数字是否在空白处。

更新:根据马丁的回答,由于涉及的危险,MySQL甚至不会让你这么做。它会将计数器至少重置为当前值+ 1。

再想一想,差距的存在会导致什么真正的问题。通常这只是一个美学问题。

如果数字变得太大,请切换到更大的数据类型(bigint应该足够了)。

票数 9
EN

Stack Overflow用户

发布于 2010-01-21 09:31:51

FWIW根据MySQL docs申请

代码语言:javascript
复制
ALTER TABLE tbl AUTO_INCREMENT = 1

tbl包含现有数据的位置应该不会有任何影响:

要更改用于新行的AUTO_INCREMENT计数器的值,请执行以下操作:

ALTER TABLE t2 AUTO_INCREMENT = value;

不能将计数器重置为小于或等于已使用的任何值。对于MyISAM,如果该值小于或等于AUTO_INCREMENT列中当前的最大值,则将该值重置为当前最大值加1。对于InnoDB,如果该值小于列中的当前最大值,则不会发生错误,并且不会更改当前序列值。

我为一个MyISAM表运行了一个小测试,确认了这一点。

因此,对你的问题的答案是:没有坏处,也不会填补空白。正如其他应答者所说:数据类型的改变看起来是最不痛苦的选择。

票数 6
EN

Stack Overflow用户

发布于 2010-01-21 09:14:10

这样做可能不会带来任何好处,而且很容易通过覆盖行来搞砸您的应用程序,因为您将重置ID的计数。(换句话说,下次插入一行时,它将用ID 1覆盖该行,然后用2覆盖该行,依此类推。)您将从填补这些空白中获得什么?如果数字太大,只需将其更改为larger number (如BIGINT)。

编辑:我站起来了。它根本不会做任何事情,这支持我的观点,即您应该将列的类型更改为更大的整数类型。BIGINT的最大可能值为2^64,这是超过18 quintillion。如果您目前只有1亿行,那么在可预见的未来,这应该是足够的。

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2106237

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档