【问题标题】:Oracle Database Link - MySQL Equivalent?Oracle Database Link - MySQL 等价物?
【发布时间】:2010-12-06 15:56:12
【问题描述】:

Oracle 的database link 允许用户查询多个物理数据库。

是否有任何 MySQL 等价物?解决方法?

我想在两个物理数据库中的两个表上运行连接查询。在 MySQL 中可以吗?

【问题讨论】:

    标签: mysql oracle


    【解决方案1】:

    我可以为您的方案想到四种可能的解决方法:

    1. 在查询 external 表时使用完全限定的表名。 MySQL 支持dbname.tablename-syntax 来访问当前数据库范围之外的表。这要求当前连接的用户具有从另一个物理数据库中请求的表中读取的适当权限。
    2. 如果您的外部数据库在不同的 MySQL 服务器上运行(在同一台机器上或通过网络连接),您可以使用复制来不断更新远程表的只读副本。 只有在运行两个单独的 MySQL 实例时才能进行复制。
    3. 使用FEDERATED MySQL storage engine 将表虚拟导入到您当前的数据库中。这提高了将当前用户访问权限授予第二个数据库的要求,因为在使用FEDERATED 存储引擎时,凭据是通过CREATE TABLE 语句提供的。这也适用于在不同物理服务器或不同 MySQL 实例上运行的数据库。我认为这将是性能最差的选项,并且确实有一些 limitations - 或多或少重要,具体取决于您的使用场景和您的要求。
    4. 这是对方法 1 的扩展。不必每次从 external 表请求信息时都指定完全限定表名,您只需在内部创建一个 view您当前的数据库基于一个简单的SELECT <<columns>> FROM <<database>>.<<table>>。这类似于FEDERATED-方法的工作方式,但仅限于同一 MySQL 实例上的表。

    我个人认为方法 (4) 是最有用的 - 但根据您的要求,其他方法也可能是可能的解决方法。

    【讨论】:

    • FEDERATED 存储引擎可以解决我的问题。我会试试看。
    • 我认为在数据库运行在不同物理服务器或不同MySQL实例的场景下,FEDERATED存储引擎是最接近oracle数据库链接的解决方案。在同一个实例上,您可以使用完全限定的表名来做所有事情。谢谢斯特凡。
    【解决方案2】:

    目前没有 MySQL 等效方法,请参阅this post。但是,正如海报所建议的那样,您可以解决如果数据库在同一台机器上,只需在表名前添加数据库名即可。

    另见this,已经6岁了,但仍未解决。它已经关闭,可能不再在他们的待办事项列表上。

    【讨论】:

      猜你喜欢
      • 2011-02-13
      • 2010-11-10
      • 2015-09-12
      • 2023-03-05
      • 1970-01-01
      • 2012-10-03
      • 2011-07-14
      • 2012-11-04
      相关资源
      最近更新 更多