2016-09-22 114 views
-1

我有一个有3000个条目的表格。 我随机选择25个转移到另一个表。 完成此操作后,我希望原始表中的ID(被分配AUTO_INCREMENT并且是主键)顺序排列,以便我可以执行下一次迭代。 我该怎么做?删除几条记录后如何在MySQL中重新排序AUTO_INCREMENT ID?

+0

因此原始表格中的条目在移动之后被删除? –

+3

不要。这个问题可能每天都会被问到。答案是“不要这样做”。作为替代方法,您可以*创建一个新表,并使用新的PK自动递增并将所有剩余记录移至该表。但为什么*?什么让你认为主键*需要*始终是完美的顺序? (提示:它不) – David

+1

你不应该。主键可能是另一个表中的外键,也需要进行更改。如果你认为你需要这样做,那么你做错了什么。 – AbraCadaver

回答

0

我们无法将auto_increment值更改为除当前最大值之外的其他值.Auto_Increment是一个继续递增的计数器,其值用于定义它的列。

将其更改为仅高于当前最大值的值的唯一方法是手动将AUTO_INCREMENT计数器的值更改为max(value)+1。

所以我想在这里,你必须在删除25条记录后按现有Id升序排列记录,并根据增量变量手动设置每条记录的id值,最后将AUTO_INCREMENT计数值设置为变量的值在最后+1。

样品:

ALTER表T SET AUTO_INCREMENT = SOME_VALUE;

虽然建议单独离开AUTO_INCREMENT并且避免所有这些,只是为了使ID看起来很棒而且没有其他可能的原因。

+1

这是解决方案的1%。另外99%的人正在追踪所有对这些值的引用并对其进行调整,并清除由此产生的混乱情况。 – tadman