MySQL Table Alias - PullRequest
       4

MySQL Table Alias

0 голосов
/ 18 июня 2010

Я переносу приложение из базы данных без учета регистра в MySQL.Мой администратор БД не разрешает изменять какие-либо параметры конфигурации Mysql, поэтому использование «lower_case_table_names» не вариант.

Имеет ли MySQL возможность псевдонимов, чтобы несколько имен таблиц указывали на одну и ту же таблицу?Например, если USER и usersB были привязаны к одной и той же таблице, эти два запроса будут вставлены в одну и ту же таблицу:

Insert into USER VALUES (2, 3....);

и

Insert into usersB VALUES (2, 3, ....);

Представления приближаются к желаемымфункциональность, но я хотел бы, чтобы команды update и alter struct работали со всеми псевдонимами.

Спасибо!

Ответы [ 4 ]

1 голос
/ 18 июня 2010

Имеет ли MySQL возможность псевдонимов, чтобы несколько имен таблиц указывали на одну и ту же таблицу?

Нет такого соглашения SQL - инструкция INSERT вставляет записи в одну и только одну таблицу. Пользовательские типы могут, но MySQL их не поддерживает.

Представление может использоваться для представления унифицированного набора результатов - IE:

CREATE VIEW vw_users AS
   SELECT * FROM USER
   UNION 
   SELECT * FROM USERSB

... и потенциально могут быть обновлены, но не будут работать для желаемой функциональности.

0 голосов
/ 12 апреля 2013

Представление - это не то же самое, что псевдоним таблицы (который можно создать с помощью оператора CREATE ALIAS в СУБД, которые его поддерживают), по крайней мере, пока не поддерживаются ограничения внешнего ключа между таблицами и представлениями, и клиент может определить, является ли представление обновляемый. MySQL нет. Псевдоним таблицы, который может указывать на таблицу в другой базе данных, очень полезен. Запрос функции.

0 голосов
/ 19 июня 2010

Одно (три хорошо) слова: MERGE storage engine.См .: http://dev.mysql.com/doc/refman/5.1/en/merge-storage-engine.html

Абсолютно без проблем иметь только одну таблицу в MERGE, даже ни одна не будет разрешена.


Редактировать: не важно, ALTER TABLE неработать для этого движка (следующая операция с таблицей MERGE не удалась бы.

0 голосов
/ 18 июня 2010

Вы можете использовать представления и UPDATE s (или любой DML) работать должным образом, если вы поддерживаете код для представления.К сожалению, вы не можете заставить операторы ALTER (или любой DDL) работать против всех представлений.Однако при изменении базовой таблицы вы можете сгенерировать все представления одним сценарием, чтобы убедиться, что система синхронизирована.

Как я понял ваш вопрос, вы говорите о представлениях без объединений или объединенийили даже фильтры - просто create view USER as select * from usersB.Вставка, обновление и удаление будет работать в вашем примере.ALTERs не будет.

...