gpt4 book ai didi

mysql - 更新 InnoDB 表中的 auto_increment 值

转载 作者:行者123 更新时间:2023-11-30 23:16:38 24 4
gpt4 key购买 nike

简短版本:我可以通过编程更新表上的 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。数据可以移动到存档,但随后的过程不会立即进行。

最佳答案

我知道这已经晚了,但在询问之后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`;

关于mysql - 更新 InnoDB 表中的 auto_increment 值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17409274/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com