具有可变值的MySQL更改数据库

具有可变值的MySQL更改数据库,mysql,database,deployment,connection,Mysql,Database,Deployment,Connection,我正在设置一个变量,然后我想使用use命令来更改数据库。不幸的是,USE没有计算变量 SET @con="testDB"; Query OK, 0 rows affected (0.00 sec) select @con; +--------+ | @con | +--------+ | testDB | +--------+ 1 row in set (0.00 sec) use @con; ERROR 1049 (42000): Unknown database '@con' 因此,当

我正在设置一个变量,然后我想使用
use
命令来更改数据库。不幸的是,
USE
没有计算变量

SET @con="testDB";
Query OK, 0 rows affected (0.00 sec)
select @con;
+--------+
| @con   |
+--------+
| testDB |
+--------+
1 row in set (0.00 sec)
use @con;
ERROR 1049 (42000): Unknown database '@con'

因此,当我尝试连接时,不会计算变量的值。有什么想法吗?

我已经找到了自己的解决方案,所以我将回答自己的问题,以防有人感兴趣

@如果您是对的,则不可能在命令
use
中使用变量

但是,由于我希望在运行时指定的数据库中创建表,因此我的解决方案是使用动态SQL:

set @schema="testDB";
set @front="CREATE TABLE IF NOT EXISTS ";
set @endpart=".`TEST1` (DIM_ID INT(16)) ENGINE = InnoDB DEFAULT CHARACTER SET = utf8 COLLATE = utf8_unicode_ci;";
set @stat=concat(@front,@schema,@endpart);
prepare command from @stat;
execute command;
所以基本上这个解决方案构建语句,准备并执行它。
@模式参数甚至可以向下传递到脚本。这样我就可以动态地构建create语句。

我认为
不可能使用@var以某种方式。但在某些情况下,以另一种方式进行可能是一种选择

USE testDB;
SET @schema = DATABASE();

我想您在使用SET时需要“:=”而不是“=”,如果我使用:=或just=,这是一样的,这意味着use仍然尝试计算字符串@conYup。刚刚发现:“您还可以在SET以外的语句中为用户变量赋值。在这种情况下,赋值运算符必须为:=和not=,因为后者在非SET语句中被视为比较运算符=”。对不起,我帮不了你。谢谢你的努力。希望以前有人遇到过这个问题。
USE
使用标识符。它与字符串文字一起工作是一个未记录的怪癖,并不意味着它将接受一个变量(或者,实际上,任何表达式)。简言之,它只是不工作的方式。