【发布时间】:2018-11-09 05:36:02
【问题描述】:
Mysql(8.0 版)数据库中有一个名为“web_file”的表,其自动增量列“num_id”。由于一些删除操作,“num_id”不是连续的。所以我删除了原来的“num_id”,并添加了一个新的 auto_increment 列,仍然从 1 开始命名为“num_id”。但我发现新的“num_id”的最大值不等于行数。这是我的sql代码:
alter table web_file drop column num_id;
alter table web_file add column num_id int not null auto_increment unique key;
select min(num_id), max(num_id), count(num_id) from web_file;
这是结果:
1 664291 662902
我尝试过多次执行sql代码,但每次的结果都是一样的。在我看来,当一列连续 auto_increment 时,它的最大值应该等于行数。那么,导致此异常的原因是什么?
【问题讨论】:
-
简短的版本是除了 auto_increment 列的唯一性之外,您永远不应该期望任何东西。冲突解决、预分配、事务回滚和导致差距的各个方面。如果你能说出你为什么希望它连续,也许可以提供另一种解决方案。 btw dba.stackexchange.com 适合这些问题/答案。
-
@danblack 我想使用连续的 auto_increment 键将表划分为几个统一的部分,因为使用“限制”会导致搜索整个表,这似乎越来越慢。那么这种情况的最佳解决方案是什么?
-
您的问题几乎没有表达出令人满意的答案。 pagination 可能是您描述的偏移退化的解决方案。如果这还不够,请显示您的查询。
标签: mysql auto-increment