首先,我在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行
做这样的事情的正确语法是什么?我搜索得很远,到目前为止一无所获。
答案 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之前,您需要使用您使用的任何服务器语言。