2015-03-13 106 views
1

我想通过首先找到最大id值来设置每列的auto_increment值。为什么我不能编写这个sql语句来设置auto_increment?

我参考了this SO question的代码。

mysql docs对于准备好的语句显示了类似的格式,所以我很困惑。

当我尝试运行准备语句时出现故障。为什么?

下面是我尝试准备一个正则表达式时的输出,然后当我尝试用'?'准备auto_increment语句时,稍后进行绑定。

mysql> PREPARE stmt1 FROM 'ALTER TABLE user AUTO_INCREMENT=2'; 
Query OK, 0 rows affected (0.00 sec) 
Statement prepared 

mysql> PREPARE stmt1 FROM 'ALTER TABLE user AUTO_INCREMENT=?'; 
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 '?' at line 1 
+0

可能的重复[如何重置MySQL自动增量使用MAX值从另一个表?](http://stackoverflow.com/questions/2410689/how-to-reset-an-mysql-autoincrement-using-a -max-value-from-another-table) – 2015-03-13 14:37:45

+0

您链接的问题包含许多关于这个问题的评论,至少有一个答案有可行的解决方法。如果你的问题是'为什么'而不是'如何',那么它可能是基于观点的话题,因为文档没有涉及这个用例。 – 2015-03-13 14:40:15

+0

我想知道'为什么',是由于MySQL版本或操作系统等。我需要确保我的代码可以在多个服务器上运行。 – Klik 2015-03-13 14:44:33

回答

1

另一种方法是

set @alter_statement = concat('alter table user auto_increment = ', @value); 
prepare stmt1 from @alter_statement; 
execute stmt1; 
deallocate prepare stmt1; 

由于种种原因,似乎很多人都在使用prepare?时遇到语法错误。

我的猜测是它失败了,因为给定的值将被替换为两个单引号之间的值(这只是一个猜测)。

相关问题