在MySQL表中重建后,auto_increment列仍然不连续



Mysql(8.0版(数据库中有一个名为"web_file"的表,其auto_increment列为"num_id"。由于某些删除操作,"num_id"不是连续的。因此,我删除了原来的"num_id",并添加了一个新的auto_increment列,该列仍然命名为从1开始的"numid"。但我发现新的"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代码,但每次的结果都是一样的。在我看来,当一列连续自动增量时,它的最大值应该等于行数。那么,是什么原因导致了这个异常呢?

您看到的并不是一个真正的例外,而是数据库中自动递增列的行为方式。自动递增列的约定是,当添加新的id时,它会依次跟随上一个最大值,即所有id值都保证是唯一的。不能保证序列是连续的。

如果您需要连续序列,则可以使用ROW_NUMBER分析函数(MySQL 8+及更高版本(:

SELECT *, ROW_NUMBER() OVER (ORDER BY num_id) rn
FROM web_file;

在早期版本的MySQL上,您可以使用相关的子查询:

SELECT *,
(SELECT COUNT(*) FROM web_file w2 WHERE t2.num_id <= t1.num_id) rn
FROM web_file t1;

最新更新