Ответ 1
Я могу представить четыре возможных обходных пути для вашего сценария:
- при запросе внешней таблицы используйте имена полностью квалифицированных таблиц. MySQL поддерживает
dbname.tablename
-syntax для доступа к таблицам за пределами текущей области базы данных. Это требует, чтобы пользователь, подключенный в настоящий момент, имел соответствующие права на чтение из запрошенной таблицы в другом физическом db. - Если ваша внешняя база данных запущена на другом сервере MySQL (либо на том же компьютере, либо через сетевое соединение), вы можете использовать репликацию для постоянного обновления копии удаленной таблицы только для чтения. Репликация возможна только в том случае, если вы используете два отдельных экземпляра MySQL.
- используйте
FEDERATED
механизм хранения MySQL, чтобы фактически импортировать таблицу в текущую базу данных. Это снимает требование предоставления прав доступа к текущему пользователю во вторую базу данных, поскольку при использовании механизма храненияFEDERATED
учетные данные задаются с помощьюCREATE TABLE
-statement. Это также работает с базами данных, запущенными на разных физических серверах или разных экземплярах MySQL. Я думаю, что это будет самый плохой вариант исполнения и имеет некоторые ограничения - более или менее важные в зависимости от вашего сценария использования и ваших требований. - Это расширение метода 1. Вместо того, чтобы указывать имена полностью квалифицированных таблиц каждый раз, когда вы запрашиваете информацию из своей внешней таблицы, вы просто можете создать view в вашей текущей базе данных на основе простого
SELECT <<columns>> FROM <<database>>.<<table>>
. Это похоже на то, как работаетFEDERATED
-метод, но ограничивается таблицами в том же экземпляре MySQL.
Лично я бы рассмотрел метод (4) как наиболее полезный, но другие могли также быть возможными обходными способами в зависимости от ваших требований.