【发布时间】:2015-03-03 08:04:01
【问题描述】:
基本上我想要的是以下代码的工作版本:
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,因此如果我不修复会导致我重复密钥错误自增值。我希望在单个查询中这样做的原因是能够在服务器启动时轻松执行查询。
【问题讨论】:
-
世上没有你想要这样做的理由。
-
查询中没有
SET。 MySQL 语法错误消息包含以检测到语法错误开始的查询片段。它说:“SET AUTO_INCREMENT =” -
@Strawberry 我将编辑主要问题以提供我的理由。
-
@axiac 我已经解决了这个问题,下面的答案之一就是关于这个问题,但这并没有解决问题。
-
分别运行两个查询并使用客户端代码将使用
SELECT检索到的值放入ALTER TABLE中不是更容易吗?
标签: mysql sql select auto-increment alter-table