Ik kan vier mogelijke oplossingen bedenken voor uw scenario:
- gebruik volledig gekwalificeerde-tabelnamen bij het zoeken naar de externe tafel. MySQL ondersteunt de
dbname.tablename
-syntaxis om toegang te krijgen tot tabellen buiten het huidige databasebereik. Dit vereist dat de momenteel verbonden gebruiker de juiste rechten heeft om uit de gevraagde tabel in een andere fysieke database te lezen. - als uw externe database op een andere MySQL-server draait (op dezelfde machine of via een netwerkverbinding), kunt u replicatie gebruiken om constant een alleen-lezen kopie van de externe tabel bij te werken. Replicatie is alleen mogelijk als u twee afzonderlijke MySQL-instanties gebruikt.
- gebruik de
FEDERATED
MySQL-opslagengine virtueel importeren de tabel in uw huidige database. Dit heft de vereiste op om de huidige gebruiker toegangsrechten te geven tot de tweede database, aangezien de inloggegevens worden gegeven met deCREATE TABLE
-statement bij gebruik van deFEDERATED
opslag motor. Dit werkt ook met de databases die op verschillende fysieke servers of verschillende MySQL-instanties draaien. Ik denk dat dit de slechtst presterende optie zal zijn en heeft wel wat beperkingen - meer of minder belangrijk, afhankelijk van uw gebruiksscenario en uw vereisten. - Dit is een uitbreiding op methode 1. In plaats van de volledig gekwalificeerde-tabelnamen te moeten specificeren telkens wanneer u informatie opvraagt van uw externe tabel, kunt u eenvoudig een weergave
maken binnen uw huidige database op basis van een eenvoudige
SELECT <<columns>> FROM <<database>>.<<table>>
. Dit lijkt op de manier waarop, deFEDERATED
-methode werkt, maar is beperkt tot tabellen op dezelfde MySQL-instantie.
Persoonlijk zou ik methode (4) als de meest bruikbare beschouwen, maar de andere kunnen ook mogelijke oplossingen zijn, afhankelijk van uw vereisten.