MySQL
ПОСМОТРЕТЬ
Поиск…
Синтаксис
CREATE VIEW view_name AS SELECT column_name (s) FROM table_name Условие WHERE; /// Простой синтаксис представления вида
СОЗДАТЬ [ИЛИ ЗАМЕНИТЬ] [АЛГОРИТМ = {НЕ УКАЗАН | MERGE | TEMPTABLE}] [DEFINER = {user | CURRENT_USER}] [SQL SECURITY {DEFINER | INVOKER}] VIEW view_name [(column_list)] AS select_statement [WITH [CASCADED | LOCAL] CHECK OPTION]; /// Полное создание синтаксиса вида
DROP VIEW [IF EXISTS] [db_name.] View_name; /// Синтаксис вида просмотра
параметры
параметры | подробности |
---|---|
view_name | Имя вида |
Оператор SELECT | Операторы SQL должны быть упакованы в представления. Это может быть оператор SELECT для извлечения данных из одной или нескольких таблиц. |
замечания
Представления представляют собой виртуальные таблицы и не содержат возвращаемых данных. Они могут спасти вас от написания сложных запросов снова и снова.
- Перед представлением представления его спецификация полностью состоит из
SELECT
. ОператорSELECT
не может содержать подзапрос в предложении FROM. - После того, как представление сделано, оно используется в основном так же, как и таблица, и может быть
SELECT
из таблицы точно так же, как и таблица.
Вы должны создавать представления, когда хотите ограничить несколько столбцов таблицы, от другого пользователя.
- Например: в вашей организации вы хотите, чтобы ваши менеджеры просматривали несколько сведений из таблицы с именем «Продажи», но вы не хотите, чтобы ваши разработчики программного обеспечения могли просматривать все поля таблицы «Продажи». Здесь вы можете создать два разных вида для ваших менеджеров и инженеров-программистов.
Производительность . VIEWs
- синтаксический сахар. Однако производительность может быть или не быть хуже, чем эквивалентный запрос с выбранным скомпоном просмотра. Оптимизатор пытается сделать это «сбрасывать» для вас, но не всегда успешно. MySQL 5.7.6 предоставляет дополнительные улучшения в Оптимизаторе. Но, несмотря на то, что использование VIEW
не будет генерировать более быстрый запрос.
Создать представление
привилегии
Оператор CREATE VIEW требует привилегии CREATE VIEW для представления и некоторую привилегию для каждого столбца, выбранного оператором SELECT. Для столбцов, используемых в другом месте в инструкции SELECT, вы должны иметь привилегию SELECT. Если предложение OR REPLACE присутствует, вы также должны иметь привилегию DROP для представления. CREATE VIEW может также требовать привилегии SUPER, в зависимости от значения DEFINER, как описано далее в этом разделе.
При обращении к представлению проверяется проверка привилегий.
Вид принадлежит базе данных. По умолчанию в базе данных по умолчанию создается новое представление. Чтобы создать представление явно в данной базе данных, используйте полное имя
Например:
db_name.view_name
mysql> CREATE VIEW test.v AS SELECT * FROM t;
Примечание. В базе данных базовые таблицы и представления используют одно и то же пространство имен, поэтому базовая таблица и представление не могут иметь одно и то же имя.
ПРОСМОТР:
- создаваться из множества видов операторов SELECT
- обратитесь к базовым таблицам или другим представлениям
- использовать объединения, UNION и подзапросы
- SELECT не нужно даже ссылаться на какие-либо таблицы
Другой пример
В следующем примере определяется представление, которое выбирает два столбца из другой таблицы, а также выражение, вычисленное из этих столбцов:
mysql> CREATE TABLE t (qty INT, price INT);
mysql> INSERT INTO t VALUES(3, 50);
mysql> CREATE VIEW v AS SELECT qty, price, qty*price AS value FROM t;
mysql> SELECT * FROM v;
+------+-------+-------+
| qty | price | value |
+------+-------+-------+
| 3 | 50 | 150 |
+------+-------+-------+
ограничения
- Перед MySQL 5.7.7 оператор SELECT не может содержать подзапрос в предложении FROM.
- Оператор SELECT не может ссылаться на системные переменные или определяемые пользователем переменные.
- В хранимой программе оператор SELECT не может ссылаться на параметры программы или локальные переменные.
- Оператор SELECT не может ссылаться на подготовленные параметры оператора.
- Любая таблица или представление, упомянутые в определении, должны существовать. После того, как представление было создано, можно отбросить таблицу или просмотреть, что
определение относится к. В этом случае использование представления приводит к ошибке. Чтобы проверить определение вида для подобных задач, используйте инструкцию CHECK TABLE. - Определение не может относиться к ВРЕМЕННОЙ таблице, и вы не можете
создайте ВРЕМЕННОЕ представление. - Вы не можете связать триггер с представлением.
- Псевдонимы для имен столбцов в инструкции SELECT проверяются на максимальную длину столбца 64 символа (не максимальный псевдоним
длина 256 символов). -
VIEW
может или не может быть оптимизирован, а также эквивалентSELECT
. Это вряд ли оптимизирует лучше.
Вид из двух таблиц
Представление наиболее полезно, когда его можно использовать для вывода данных из нескольких таблиц.
CREATE VIEW myview AS
SELECT a.*, b.extra_data FROM main_table a
LEFT OUTER JOIN other_table b
ON a.id = b.id
В представлениях mysql не реализованы. Если теперь выполнить простой запрос SELECT * FROM myview
, mysql фактически выполнит LEFT JOIN за сценой.
Созданный вид может быть присоединен к другим представлениям или таблицам
Обновление таблицы через VIEW
VIEW
очень похож на таблицу. Хотя вы можете UPDATE
таблицу, вы можете или не сможете обновить представление в этой таблице. В общем случае, если SELECT
в представлении достаточно сложный, чтобы потребовать временную таблицу, то UPDATE
не допускается.
Такие вещи, как GROUP BY
, UNION
, HAVING
, DISTINCT
и некоторые подзапросы, не позволяют обновлять представление. Подробности в справочном руководстве .
ПРОСМОТР ПРОСМОТРА
- Создать и удалить представление в текущей базе данных.
CREATE VIEW few_rows_from_t1 AS SELECT * FROM t1 LIMIT 10;
DROP VIEW few_rows_from_t1;
- Создать и отбросить представление, ссылающееся на таблицу в другой базе данных.
CREATE VIEW table_from_other_db AS SELECT x FROM db1.foo WHERE x IS NOT NULL;
DROP VIEW table_from_other_db;