PHP Mysql 跨数据库连接

Posted

技术标签:

【中文标题】PHP Mysql 跨数据库连接【英文标题】:PHP Mysql joins across databases 【发布时间】:2010-12-13 02:50:06 【问题描述】:

假设我在同一物理服务器上有两个独立的数据库 X 和 Y。

我的所有查询目前都用完了 X。

我发现我在 Y 中有一个表,我希望 X 可以使用它进行 JOINS。

所以...现在我在 X 和 Y 中保留了一张我需要的 X 和 Y 表的副本,但是 Y 中的数据不断变化,因此该副本很快就会过时。对于这个应用程序来说并不重要,但对于我现在正在设计的另一个应用程序来说,这是行不通的。

X 现在只需要读取 Y 中的表。

有没有一种有效的方法来跨两个数据库进行连接?

我更喜欢 mysql 解决方案,而不是在 php 中打开多个数据库连接。

谢谢。

编辑:那么这些行会变成什么?:

$conn = mysql_connect('localhost','username','password');
@mysql_select_db('database_name',$conn)

是的.. 这是一个旧应用程序,因此使用 mysql 而不是 mysqli。假设我可以转换它。

EDIT2:所以在我没有指定database_name.table_name 并且只指定table_name 的地方,我得到了选择的任何内容,而在我指定database.table_name 的地方,我得到了我所要求的......对吗?是的。有效。

EDIT3:跨数据库连接与同一数据库内的连接相比,是否会对性能产生重大影响?没有。看起来一样快。

感谢大家的回复。

【问题讨论】:

这些行保持不变。您仍然必须使用 mysql_select_db(),因为 mysql 在执行查询之前需要一个活动的 db/schema。 mysql_select_db() 实际上不是必需的。它只是设置活动的默认数据库,你可以不用它,如果你指定db.table 【参考方案1】:

你必须给另一个数据库中的表起别名:

select a.id
     , b.foreign_id
  from database1.table1 a
  join database2.table1 b
    on b.foreign_id = a.id

【讨论】:

【参考方案2】:

编辑:那么这些行会变成什么?:

$conn = mysql_connect('localhost','用户名','密码'); @mysql_select_db('database_name',$conn)

mysql_select_db 是可选的。因为它只是选择要使用的活动数据库。 http://us3.php.net/manual/en/function.mysql-select-db.php

是的.. 这是一个旧应用程序,因此 mysql 而不是 mysqli。假设我 可以转换它。

恕我直言,我不认为使用 MYSQL 与速度慢有关,根据我自己的研究,MYSQLi 与 MYSQL 相比,速度并没有太大的提高。现实世界的测试并没有表明这是一个重要的性能驱动因素。老实说,我的所有应用程序都使用 MYSQL。

【讨论】:

我所有的新应用程序都使用 mysqli 和准备好的语句。重复的东西更快,其余的差不多。【参考方案3】:

只使用 SQL

SELECT col1, col2 FROM foo f LEFT JOIN db2.bar b ON b.col1 = f.col1

【讨论】:

【参考方案4】:

如果 2 个数据库位于同一台服务器上,您只需在连接查询中使用数据库名称限定表即可。

select * from database1.table1 as t1
 inner join database2.table2 as t2
 on t2.fk_id = t1.pk_id

【讨论】:

以上是关于PHP Mysql 跨数据库连接的主要内容,如果未能解决你的问题,请参考以下文章

使用php跨服务器的mysqli连接错误

mysql长连接跨网段问题

跨网络的java mysql连接

PHP连接mysql数据库,并将取出的数据以json的格式输出

如何在 mysql 中启用跨数据库连接?

mySQL 子查询/跨数据库连接?