Поиск…


Синтаксис

  • 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;


Modified text is an extract of the original Stack Overflow Documentation
Лицензировано согласно CC BY-SA 3.0
Не связан с Stack Overflow