我有名为company_abccompany_xyz等的数据库。这些company_*数据库具有相同的结构,并且包含users表。

我需要做的是仅从company_*数据库聚合所有用户数据,然后将此视图复制到另一台服务器。该视图将只是像

COMPANY NAME | USERNAME
abc          | user@email.com
abc          | user1@email.com
xyz          | user2@email.com
company3     | user3@email.com


在MySQL中有可能这样吗?

数据库以及用户都是动态创建的,因此我不能仅使用静态数据库集来创建视图。

最佳答案

查找数据库名称列表:

SELECT SCHEMA_NAME
    FROM information_schema.`SCHEMATA`
    WHERE SCHEMA_NAME LIKE 'company%';


如果您可以使用类似PHP的代码进行编码,那么其余的工作就非常简单-从每个数据库构建一个SELECT的UNION。但是,如果您必须仅在SQL中执行此操作...

要构建UNION,请编写一个存储过程。它将在CURSOR中执行上述查询。在遍历光标的循环内,将CONCAT()构造的SELECT放置到要构建的UNION上。

循环完成后,请准备并执行构造的UNION。这将提供类似您所输出示例的信息。

但是,如果现在需要将其结果插入另一台服务器,则应保留存储过程的范围,并使用其他语言。

好的,好的,如果必须使用SQL,则需要进行一些设置:创建一个连接到另一台服务器的“联合”表。现在,在您的SP中,将INSERT INTO fed_tbl连接到UNION前面。然后执行应该执行整个任务。

如果您对FEDERATED引擎有问题,则可能需要在MariaDB中切换到FederatedX。

“细节留给读者练习。”

07-25 21:49
查看更多