作为MySQL查询中的变量的数据库名称

问题描述:

我正在创建一个MySQL转储文件,需要与多个数据库一起运行。 结构几乎是这样的:作为MySQL查询中的变量的数据库名称

SET @parent_database = 'db_name'; 
CREATE OR REPLACE VIEW t_colours AS SELECT `key_name`, `value` FROM @parent_database.`colours` as COLOURS WHERE 1; 

当我运行此查询接下来的时间,我的计划是只改变变量parent_database

这可能吗?

每次我现在运行这个,我收到一个错误:

1064 - 你在你的SQL语法错误;检查对应于您的MySQL服务器版本的手册,以便在'@ parent_database.`colours`附近使用正确的语法作为COLORS WHERE 1'在第1行

任何方式来实现这种情况?

还有很多意见可供创建。

+0

你不能使用var表格或列名称 – scaisEdge

+0

如果不连接到受尊重的数据库就无法从数据库获取数据,因此它不起作用; – itzmukeshy7

当您执行查询时,mysql将表名称视为对象而不是字符串,因此这不会像您期望的那样工作。

但是,有一条出路,你可以使用类似于下面的代码片段。

SET @parent_database = 'db_name'; 
SET @q = CONCAT('CREATE OR REPLACE VIEW t_colours AS SELECT `key_name`,`value` FROM', @parent_database, '.`colours` as COLOURS WHERE 1;'); 
PREPARE stmt FROM @q; 
EXECUTE stmt; 
DEALLOCATE PREPARE stmt;