通过选择结果更改AUTO_INCREMENT值

Mar*_*leu 3 mysql sql select alter-table auto-increment

基本上我想要的是以下代码的工作版本:

ALTER TABLE table_name
AUTO_INCREMENT =
(
    SELECT
        `AUTO_INCREMENT`
    FROM
        INFORMATION_SCHEMA.TABLES
    WHERE
        TABLE_SCHEMA = 'database_name'
    AND TABLE_NAME = 'another_table_name'
);
Run Code Online (Sandbox Code Playgroud)

错误:

1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'AUTO_INCREMENT =
Run Code Online (Sandbox Code Playgroud)

原因:

根据MySQL Doc:

只要服务器运行,InnoDB就会使用内存中的自动增量计数器.当服务器停止并重新启动时,InnoDB会重新初始化每个表的计数器,以便第一次INSERT到表中,如前所述.

这意味着每当我重新启动服务器时,我的auto_increment值都会设置为尽可能小的值.

我有一张叫做ticket另一张叫的桌子ticket_backup.它们都有一个id共享的列.ticket表格内的记录可供客户索取.当他们声称ticket我在里面插入记录ticket_backup然后我从ticket表中删除它们.截至今天,我56 thousand已经索赔(内部ticket_backup)和0票可用.如果我现在重新启动服务器并且不执行该操作ALTER TABLE,则我提供的第一张票将具有id 1已经使用的ID ticket_backup,因此如果我不修复自动增量值,则会导致重复键错误.我想在单个查询中使用它的原因是能够在服务器启动时轻松执行查询.

Sah*_*hah 7

试试这个:

SELECT `AUTO_INCREMENT` INTO @AutoInc
FROM INFORMATION_SCHEMA.TABLES
WHERE TABLE_SCHEMA = 'database_name' AND TABLE_NAME = 'another_table_name';

SET @s:=CONCAT('ALTER TABLE `database_name`.`table_name` AUTO_INCREMENT=', @AutoInc);
PREPARE stmt FROM @s;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
Run Code Online (Sandbox Code Playgroud)