繁体   English   中英

更新InnoDB表中的auto_increment值

[英]Updating auto_increment value in an InnoDB table

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

我知道这已经晚了,但是在问了这个相关问题之后 ,我发现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`;

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM