MySQL用变量值更改数据库

时间:2012-03-29 08:32:36

标签: 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'

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

2 个答案:

答案 0 :(得分:8)

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

@outis你是对的,不可能在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;

所以基本上这个解决方案构建语句,准备并执行它。 @schema参数甚至可以过去到脚本。这样我就可以动态构建create语句。

答案 1 :(得分:0)

我认为以某种方式USE @var;是不可能的。但在某些情况下,反过来可能是一种选择。

USE testDB;
SET @schema = DATABASE();