2011-04-15 31 views
5

我被要求为Web应用程序构建模块,该模块也将用作独立网站。既然如此,我想使用一个单独的数据库,并想知道是否有办法在一个数据库中创建一个表,成为另一个数据库中的“指针”。在另一个数据库中使用表格

例如,我有数据库DB1和DB2

DB1有表的用户,所以我想有db2.users指向db1.users。

我知道我可以设置触发器,什么不能同步两个不同的表,但听起来冷却器:)

编辑

所以在我的代码,我使用的是SQL如

select * from users 

现在,在数据库级别,我希望“用户”实际上是db1.users。然后,如果我想,我可以删除别名/指针,“select * from users”将指向当前数据库中的用户表。我想我正在寻找的是一种“全球别名”类型的东西。

+0

我不完全明白你在问什么,你能更具体一点吗? – Khez 2011-04-15 09:13:59

+0

我试着解释更好(查看问题) – 2011-04-15 09:49:00

+0

你不能只是'mysql_select_db('db2');/*查询*/mysql_select_db('db1');'? – Khez 2011-04-15 10:04:26

回答

4

federated storage engine提供了类似于您要求的功能。 而且如果你的数据库在同一个数据库服务器上,联邦存储系统对我来说听起来有点像过火。您可以改为create a view

如果db1不可用,这两种方法都不会有用。正如Emmerman已经指出的那样,如果要准备db1不可用的情况,则需要将数据存储在db2中。

+0

我想你很想念我的观点。我希望能够在数据库级别更改一行代码,以便从模块单独转移。所以当我做“从用户中选择*”时,我可以删除别名并在db2中创建一个名为“users”的表格 – 2011-04-15 09:36:46

+0

认为您编辑了答案?这是我能找到的最接近的方法,因为我非常感谢:) – 2011-04-22 09:55:44

6

只需从其他数据库直接使用它?

SELECT ... FROM `db1`.`users` LEFT JOIN `db2`.`something` 
+0

当模块成为独立网站时,db1可能不一定可用,因此我宁愿避免使用此方法。 – 2011-04-15 09:18:09

+0

然后,您需要该表的副本,而不是“指针”(不管它是什么意思)。 – Emmerman 2011-04-15 09:19:33

+0

是的,但我不想更改应用程序中的每个sql语句。因此, select ... from用户在db级别从db1.users更改为数据库内的users表。 – 2011-04-15 09:38:14

相关问题