MySQL,如何在ADD关键字后传递@var?

时间:2016-12-11 00:34:04

标签: mysql sql database

首先,我在5.6.34中使用一个文本列创建我的表--MySQL社区服务器(GPL),如下所示:

CREATE TABLE `$_query_test`.`t1` ( c1 TEXT NOT NULL ) ENGINE = InnoDB;

然后我执行:

SET @var = 321; INSERT INTO `t1` (c1) VALUES (@var);

我按预期得到一个值为321的条目,但是当我执行时:

SET @var = '_string_';
ALTER TABLE `t1` ADD @var TEXT;

我收到错误

  

#1064 - 您的SQL语法出错;检查与MySQL服务器版本对应的手册,以获得正确的语法   靠近' @var TEXT'在第1行

做这样的事情的正确语法是什么?我搜索得很远,到目前为止一无所获。

2 个答案:

答案 0 :(得分:2)

答案是你不能用sql变量代替标识符(例如字段名,表名等)。周期。

您可以做的是在应用程序级别或在mysql中使用已替换标识符的字符串创建完整的sql语句,然后执行完整的语句。

在mysql中,您可以通过prepared statements

执行此操作
PREPARE stmt1 FROM CONCAT('ALTER TABLE `t1` ADD ', @var, ' TEXT');
EXECUTE stmt1;
DEALLOCATE PREPARE stmt1;

答案 1 :(得分:0)

您可以将变量用于值,但不能使用字段名称。在编写alter table之前,您需要使用您使用的任何服务器语言。