为啥我不能准备这个 sql 语句来设置 auto_increment?
Posted
技术标签:
【中文标题】为啥我不能准备这个 sql 语句来设置 auto_increment?【英文标题】:Why can't I prepare this sql statement to set auto_increment?为什么我不能准备这个 sql 语句来设置 auto_increment? 【发布时间】:2015-05-16 01:59:21 【问题描述】:我想通过首先找到最大 id 值来设置每列的 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
【问题讨论】:
How to Reset an MySQL AutoIncrement using a MAX value from another table?的可能重复 您链接到的问题包含许多关于此问题的 cmet,并且至少一个答案具有可行的解决方法。如果您的问题是“为什么”而不是“如何”,那么鉴于文档未涵盖此用例,它可能与基于意见的主题无关。 我想知道why
,是因为mysql版本还是操作系统等原因。我需要确保我的代码可以在多个服务器上运行。
如果您担心可移植性,请采取务实的方法,不要为此任务使用准备好的语句。我不明白你为什么要在这里使用用户输入,而且无论如何要确保你在连接中使用的值是一个整数并不难。
【参考方案1】:
另一种选择是
set @alter_statement = concat('alter table user auto_increment = ', @value);
prepare stmt1 from @alter_statement;
execute stmt1;
deallocate prepare stmt1;
由于某些原因,似乎很多人在使用 prepare
和 ?
时遇到语法错误。
我的猜测是它失败了,因为给定的值将被替换为两个单引号之间的值(但这只是一个猜测)。
【讨论】:
以上是关于为啥我不能准备这个 sql 语句来设置 auto_increment?的主要内容,如果未能解决你的问题,请参考以下文章