在设置mysql INNODB自动增量表值时使用变量

在设置mysql INNODB自动增量表值时使用变量,mysql,stored-procedures,auto-increment,Mysql,Stored Procedures,Auto Increment,我尝试(重新)将自动增量值设置为变量值,但失败: CREATE TABLE test_table ( id bigint(20) unsigned NOT NULL AUTO_INCREMENT, PRIMARY KEY (`id`)) ENGINE=InnoDB AUTO_INCREMENT=1; SET @tmpvar = 12345; ALTER TABLE test_table AUTO_INCREMENT=@tmpvar; 最后一个命令失败,原因是: ERROR 1064

我尝试(重新)将自动增量值设置为变量值,但失败:

CREATE TABLE test_table (
  id bigint(20) unsigned NOT NULL AUTO_INCREMENT, 
  PRIMARY KEY (`id`)) ENGINE=InnoDB AUTO_INCREMENT=1;
SET @tmpvar = 12345;
ALTER TABLE test_table AUTO_INCREMENT=@tmpvar;
最后一个命令失败,原因是:

ERROR 1064 (42000): 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 '@tmpvar' at line 1
不能这样设置自动增量值吗?有哪些替代方案?我需要在一个旋转日志表的存储过程中设置这个值,并且我需要新表从一些旧表中获取的值开始

附录

直接创建具有正确自动增量初始值的表也会失败:

CREATE TABLE test_table (
  id bigint(20) unsigned NOT NULL AUTO_INCREMENT, 
  PRIMARY KEY (`id`)) ENGINE=InnoDB AUTO_INCREMENT=@tmpvar;
另外,我在这里发现了一个相关的问题,但没有答案:

编辑 已更正缺少的分号,请尝试:

CREATE TABLE`test_TABLE`(
`id`bigint(20)无符号非空自动增量,
主键(`id`)引擎=InnoDB自动增量=1;
SET@`tmpvar`:=12345;
SET@`stmt\u alter`:=CONCAT('alter TABLE`test\u TABLE`AUTO\u INCREMENT=',@`tmpvar`);
从@stmt_alter`中准备'stmt';
执行'stmt';
取消分配“stmt”;

更新

你可以用它

SET@`tmpvar`:=12345;
SET@`stmt\u create`:=CONCAT('create TABLE`test\u TABLE`)(
`id`bigint(20)无符号非空自动增量,
主键(`id`)引擎=InnoDB AUTO_INCREMENT=',@`tmpvar`);
从@stmt_create`中准备'stmt';
执行'stmt';
取消分配“stmt”;

使用。缺少;赛前command@Shadow-我纠正了这个。但这不是问题所在。@wchiquito您想解释一下如何准备alter table语句吗?@Shadow:
用户变量可以在允许使用表达式的大多数上下文中使用。这目前不包括显式需要文字值的上下文,例如SELECT语句的LIMIT子句或LOAD DATA语句的IGNORE N LINES子句中的上下文。
。明白了,明白了。我太专注于错误信息了:(它现在正在工作。我理解为什么它以前没有。谢谢你向我指出这一点。