Puedo pensar en cuatro posibles soluciones para su escenario:
- usar nombres de tablas totalmente calificados cuando se consulta el externo mesa. MySQL admite
dbname.tablename
-sintaxis para acceder a tablas fuera del alcance de la base de datos actual. Esto requiere que el usuario actualmente conectado tenga los derechos apropiados para leer de la tabla solicitada en otra base de datos física. - si su base de datos externa se ejecuta en un servidor MySQL diferente (ya sea en la misma máquina oa través de una conexión de red), puede usar la replicación para actualizar constantemente una copia de solo lectura de la tabla remota. La replicación solo es posible si está ejecutando dos instancias de MySQL separadas.
- use el
FEDERATED
Motor de almacenamiento MySQL para importar virtualmente la tabla en su base de datos actual. Esto elimina el requisito de otorgar al usuario actual derechos de acceso a la segunda base de datos, ya que las credenciales se proporcionan conCREATE TABLE
-declaración cuando se usa elFEDERATED
motor de almacenamiento Esto también funciona con las bases de datos que se ejecutan en diferentes servidores físicos o diferentes instancias de MySQL. Creo que esta será la opción de peor rendimiento y tiene algunos limitaciones - más o menos importante según su escenario de uso y sus requisitos. - Esta es una extensión del método 1. En lugar de tener que especificar los nombres de tabla completamente calificados cada vez que solicita información de su externo tabla, simplemente puede crear una vista
dentro de su base de datos actual basado en un simple
SELECT <<columns>> FROM <<database>>.<<table>>
. Esto se asemeja a la forma en queFEDERATED
-método funciona, pero está limitado a tablas en la misma instancia de MySQL.
Personalmente, consideraría el método (4) como el más útil, pero los otros también podrían ser posibles soluciones según sus requisitos.