#mysql #alias
#mysql #псевдоним
Вопрос:
Меня попросили создать модуль для веб-приложения, которое также будет использоваться как отдельный веб-сайт. Поскольку это так, я хотел использовать отдельную базу данных и подумал, есть ли способ, чтобы таблица в одной базе данных была «указателем» в другой базе данных.
Например, у меня есть базы данных db1 и db2
в db1 есть таблица users, поэтому я хочу, чтобы db2.users указывал на db1.users.
Я знаю, что мог бы настроить триггеры и то, чего нет, для синхронизации двух отдельных таблиц, но это звучит круче 🙂
Редактировать
Итак, в моем коде я использую sql, такой как
select * from users
Теперь, на уровне базы данных, я хочу, чтобы «users» на самом деле были db1.users. Затем, если я захочу, я могу удалить псевдоним / указатель, и «выбрать * из пользователей» укажет на таблицу users в текущей базе данных. Я предполагаю, что я ищу что-то типа «глобального псевдонима».
Комментарии:
1. Я не совсем понимаю, о чем вы спрашиваете, не могли бы вы быть немного конкретнее?
2. Я пытался объяснить лучше (посмотреть вопрос)
3. Ты не можешь просто
mysql_select_db('db2'); /*queries*/ mysql_select_db('db1');
?4. нет, это просто долгий путь выполнения того, что предлагает Эммерман
5. Что вам нужно? Это не похоже на то, что предложил @Emmerman.
Ответ №1:
Просто использовать ее непосредственно из другой базы данных?
SELECT ... FROM `db1`.`users` LEFT JOIN `db2`.`something`
Комментарии:
1. Ну, db1 не обязательно может быть доступен, когда модуль становится автономным веб-сайтом, поэтому я бы предпочел избегать этого метода
2. Тогда вам нужна копия этой таблицы, а не «указатель» (что бы это ни значило).
3. Да, но я не хочу менять каждую инструкцию sql в приложении. Итак, выберите … из users изменяется на уровне базы данных с point на db1.users на таблицу users в базе данных.
Ответ №2:
Механизм федеративного хранилища предлагает нечто похожее на запрошенную вами функцию. И если ваши базы данных находятся на одном сервере баз данных, разработка федеративного хранилища звучит для меня немного излишне. Возможно, вы захотите создать представление вместо этого.
Оба метода не будут полезны, если db1 недоступен. Как уже указывал Эммерман, вам необходимо сохранить данные в db2, если вы хотите подготовиться к случаю недоступности db1.
Комментарии:
1. Я думаю, вы упускаете мою мысль. Я хочу иметь возможность просто изменить одну строку кода на уровне базы данных, чтобы передача из модуля была автономной. поэтому, когда я делаю «выбрать * из пользователей», я могу удалить псевдоним и создать таблицу с именем «пользователи» в db2
2. Думаю, вы отредактировали ответ? Это самый близкий метод, который я смог найти к тому, что я искал, так что спасибо 🙂