mysql - 数据库名称作为 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 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '@parent_database.`colours` as COLOURS WHERE 1' at line 1

有什么办法可以实现这一点吗?

还有更多 View 需要创建。

最佳答案

当您执行查询时,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;

关于mysql - 数据库名称作为 MySQL 查询中的变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44365516/

相关文章:

c# - 澄清两列同名

mysql - DBI/DBD::mysql/mysql_type_name: 如何区分Blob和Text?

mysql - 如何将 sql 查询的结果转换为具有特定格式的 html 表

mysql - Perl DBI 使用 mysql 原生多插入能力插入多行

mysql - 组合排列查询

php - 使用 userids 生成加密 key

php - POST 到不带 "form"的 PayPal 示例 URL

mysql - 将 XML 文件与 MySQL 表合并

javascript - 在使用 Crud 1.1 和 jqgrid 方面需要帮助

Rails 中的 Mysql 约束数据库条目