更新InnoDB表中的auto_increment值

时间:2013-07-01 16:27:15

标签: mysql

简短版本:我可以以编程方式更新表格中的auto_increment值吗?我试图通过mysql init_file这样做,所以它在启动时发生,但我看不到它的工作。

USE theDb;

SELECT max(maxid) FROM (SELECT max(RegistrationId)+1 maxid FROM Registration
UNION
SELECT max(RegistrationId)+1 maxid FROM RegistrationArchive) t into @maxId;

ALTER TABLE Registration AUTO_INCREMENT=@maxId;

更长的版本: 我有一个InnoDB表的mysql数据库。一个表(保存注册信息)具有自动增量列,当处理行时,它将被复制到第二个存档表并从第一个存档表中删除。存档表没有自动增量列。 (顺便说一句,不是我的设计......)

问题是当数据库由于某种原因重新启动时很少,第一个表重新计算下一个增量值 - InnoDB的一个特性。该表通常为空或非常小,计算的下一个增量将对应于已使用且位于归档表中的id。数据被移动到存档ok,但后续进程在此之后不能正常工作。

1 个答案:

答案 0 :(得分:0)

我知道这已经晚了,但在询问this related question后,我发现sql语句的某些部分需要是文字,不能被user_defined_variables替换。如果需要更改SQL语句的这些部分,则需要使用prepared statements

所以你需要做这样的事情:

SET @`stmt_alter` := CONCAT('ALTER TABLE `Registration` AUTO_INCREMENT = ', @`maxId`);
PREPARE `stmt` FROM @`stmt_alter`;
EXECUTE `stmt`;
DEALLOCATE PREPARE `stmt`;