一尘不染

通过选择结果更改AUTO_INCREMENT值

sql

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

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

错误:

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 =

原因:

根据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,因此,如果我不解决自动递增值,则会导致重复键错误。我之所以希望在单个查询中执行此操作,是为了能够在服务器启动时轻松执行该查询。


阅读 202

收藏
2021-03-08

共1个答案

一尘不染

试试这个:

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;
2021-03-08