1

简短版本:我可以以编程方式更新表上的 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。数据可以移动到存档,但之后的后续流程无法正常工作。

4

1 回答 1

0

我知道这已经很晚了,但是在询问了这个相关问题之后,我发现 sql 语句的某些部分需要是文字,不能被 user_defined_variables 替换。如果您需要更改 SQL 语句的这些部分,您需要使用准备好的语句

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

SET @`stmt_alter` := CONCAT('ALTER TABLE `Registration` AUTO_INCREMENT = ', @`maxId`);
PREPARE `stmt` FROM @`stmt_alter`;
EXECUTE `stmt`;
DEALLOCATE PREPARE `stmt`;
于 2015-12-14T13:30:27.317 回答