基本上我想要的是以下代码的工作版本:
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
,这是ticket_backup
已经使用的ID,因此导致我重复如果我没有修复自动增量值,则会出现关键错误。我想在单个查询中使用它的原因是能够在服务器启动时轻松执行查询。
答案 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