2011-04-15 32 views
5

Me han pedido que cree un módulo para una aplicación web, que también se usará como sitio web independiente. Como este es el caso, quería usar una base de datos separada, y me preguntaba si había una manera de tener una tabla en una base de datos, ser un "puntero" en otra base de datos.Usar una tabla en otra base de datos

Por ejemplo, tengo bases de datos DB1 y DB2

DB1 tiene tabla de usuarios, por lo que yo quiero tener db2.users apuntan a db1.users.

Sé que podría desencadenantes de configuración y lo que no para sincronizar dos mesas separadas pero suena este refrigerador :)

EDITAR

Así que en mi código que estoy utilizando SQL como

select * from users 

Ahora, en el nivel de la base de datos, quiero que los "usuarios" sean realmente db1.users. Luego, si quiero, puedo eliminar el alias/puntero y "seleccionar * de los usuarios" señalará la tabla de usuarios en la base de datos actual. Creo que lo que estoy buscando es un tipo de alias "global".

+0

No entiendo completamente lo que pregunta, ¿puede ser un poco más específico? – Khez

+0

He intentado explicar mejor (ver pregunta) –

+0

¿No puede simplemente 'mysql_select_db ('db2');/* consultas */mysql_select_db ('db1'); '? – Khez

Respuesta

4

El federated storage engine ofrece algo similar a la función que pidió. Y si sus bases de datos están en el mismo servidor de base de datos, el enganche de almacenamiento federado me suena un poco exagerado. Es posible que desee create a view en su lugar.

Ambos métodos no serán útiles si db1 no está disponible. Como Emmerman ya señala, debe almacenar los datos en db2 si desea prepararse para el caso de que db1 no esté disponible.

+0

Creo que extrañas mi punto. Quiero poder cambiar una sola línea de código en el nivel de la base de datos para que la transferencia del módulo sea independiente. entonces cuando selecciono "select * from users" puedo eliminar el alias y crear una tabla llamada "users" en db2 –

+0

¿Crees que editaste la respuesta? Este es el método más cercano que pude encontrar a lo que estaba buscando, así que gracias :) –

6

¿Solo lo usa directamente desde otra base de datos?

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

Bueno, db1 podría no estar necesariamente disponible cuando el módulo se convierta en un sitio web independiente, por lo tanto, preferiría evitar este método –

+0

. Entonces necesita una copia de esa tabla, no un 'puntero' (lo que signifique). – Emmerman

+0

Sí, pero no quiero tener que cambiar cada instrucción SQL en la aplicación. Por lo tanto, seleccionar ... de usuarios se cambia en el nivel db desde el punto a db1.users a la tabla de usuarios dentro de la base de datos. –

Cuestiones relacionadas