作为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行
任何方式来实现这种情况?
还有很多意见可供创建。
答
当您执行查询时,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;
你不能使用var表格或列名称 – scaisEdge
如果不连接到受尊重的数据库就无法从数据库获取数据,因此它不起作用; – itzmukeshy7