我有名为company_abc
,company_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。
“细节留给读者练习。”