最佳答案
我可以为您的方案想到四种可能的解决方法:
- 在查询 external 表时使用完全限定的表名。 MySQL 支持
dbname.tablename
-访问当前数据库范围之外的表的语法。这要求当前连接的用户具有从另一个物理数据库中请求的表中读取的适当权限。 - 如果您的外部数据库在不同的 MySQL 服务器上运行(在同一台机器上或通过网络连接),您可以使用复制来不断更新远程表的只读副本。 只有在运行两个单独的 MySQL 实例时才能进行复制。
- 使用
FEDERATED
MySQL storage engine将表虚拟导入到您当前的数据库中。这提高了将当前用户访问权限授予第二个数据库的要求,因为凭据是通过CREATE TABLE
提供的。 - 使用FEDERATED
时的声明存储引擎。这也适用于在不同物理服务器或不同 MySQL 实例上运行的数据库。我认为这将是性能最差的选项,并且确实有一些 limitations - 或多或少取决于您的使用场景和要求。 - 这是对方法 1 的扩展。每次您从 external 表请求信息时,您不必指定完全限定表名,您只需创建一个 view在您当前的数据库中基于一个简单的
SELECT <<columns>> FROM <<database>>.<<table>>
.这类似于FEDERATED
- 方法有效,但仅限于同一 MySQL 实例上的表。
我个人认为方法 (4) 是最有用的 - 但根据您的要求,其他方法也可能是可能的解决方法。
关于mysql - Oracle Database Link - MySQL 等价物?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1565993/