通过选择结果更改AUTO_INCREMENT值

时间:2015-01-05 18:12:45

标签: mysql sql select auto-increment alter-table

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

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。它们都有一个共享的列idticket表中的记录可供客户索取。当他们声明ticket我在ticket_backup内插入记录,然后我从ticket表中删除它们。截至今天,我已经声明了56 thousand张票(在ticket_backup内)和0张票。如果我现在重新启动服务器并且不执行ALTER TABLE,我提供的第一张机票将id 1,这是ticket_backup已经使用的ID,因此导致我重复如果我没有修复自动增量值,则会出现关键错误。我想在单个查询中使用它的原因是能够在服务器启动时轻松执行查询。

3 个答案:

答案 0 :(得分: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;

答案 1 :(得分:1)

快速浏览一下,错误说明了一切。语法不正确

语法应遵循:

ALTER TABLE table_name AUTO_INCREMENT=<INTEGER_VALUE>;

所以查看您的查询,删除“#34; SET&#34;

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

答案 2 :(得分:0)

怎么样?
ALTER TABLE table_name 
SET AUTO_INCREMENT = (SELECT MAX(a.AUTO_INC_VAL) FROM database_name.table_name a) )

如果您想要当前增量值或

ALTER TABLE table_name 
SET AUTO_INCREMENT = (SELECT MIN(a.AUTO_INC_VAL) FROM database_name.table_name a) )

如果您想要相同的初始INCREMENT VALUE