Spec-Zone .ru
спецификации, руководства, описания, API

13.1.20. CREATE VIEW Синтаксис

CREATE    [OR REPLACE]    [ALGORITHM = {UNDEFINED | MERGE | TEMPTABLE}]    [DEFINER = { user | CURRENT_USER }]    [SQL SECURITY { DEFINER | INVOKER }]    VIEW view_name [(column_list)]    AS select_statement    [WITH [CASCADED | LOCAL] CHECK OPTION]

CREATE VIEW оператор создает новое представление, или заменяет существующий если OR REPLACE пункт дается. Если представление не существует, CREATE OR REPLACE VIEW то же самое как CREATE VIEW. Если представление действительно существует, CREATE OR REPLACE VIEW то же самое как ALTER VIEW.

select_statement a SELECT оператор, который обеспечивает определение представления. (Когда Вы выбираете из представления, Вы выбираете в действительности использование SELECT оператор.) select_statement может выбрать из базовых таблиц или других представлений.

Определение представления "замораживается" во время создания, так изменения к базовым таблицам позже не влияют на определение представления. Например, если представление определяется как SELECT * на таблице новые столбцы, добавленные к таблице позже, не становятся частью представления.

ALGORITHM пункт влияет, как MySQL обрабатывает представление. DEFINER и SQL SECURITY пункты определяют контекст защиты, который будет использоваться, проверяя права доступа во время вызова представления. WITH CHECK OPTION пункт может быть дан, чтобы ограничить, вставляет или обновляет к строкам в таблицах, на которые ссылается представление. Эти пункты описываются позже в этом разделе.

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 оператор может быть простыми ссылками на столбцы таблицы. Они могут также быть выражениями, которые используют функции, постоянные величины, операторы, и т.д.

У представлений должны быть уникальные имена столбцов без копий, точно так же как базовые таблицы. По умолчанию, имена столбцов, полученных SELECT оператор используется для имен столбцов представления. Определить явные имена для столбцов представления, дополнительного column_list пункт может быть дан как список разделенных от запятой идентификаторов. Число имен в column_list должно быть то же самое как число столбцов, полученных SELECT оператор.

Неполная таблица или представление называют в SELECT оператор интерпретируется относительно базы данных значения по умолчанию. Представление может обратиться к таблицам или представлениям в других базах данных, квалифицируя таблицу или просмотреть имя с надлежащим именем базы данных.

Представление может быть создано из многих видов 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 |+------+-------+-------+

Определение представления подвергается следующим ограничениям:

ORDER BY разрешается в определении представления, но оно игнорируется, если Вы выбираете из представления, используя оператор, у которого есть его собственное ORDER BY.

Для других опций или пунктов в определении, они добавляются к опциям или пунктам оператора, который ссылается на представление, но эффект неопределен. Например, если определение представления включает a LIMIT пункт, и Вы выбираете из представления, используя оператор, у которого есть его собственное LIMIT пункт, это неопределено, какой предел применяется. Этот тот же самый принцип применяется к опциям такой как ALL, DISTINCT, или SQL_SMALL_RESULT это следует SELECT ключевое слово, и к пунктам такой как INTO, FOR UPDATE, LOCK IN SHARE MODE, и PROCEDURE.

Если Вы создаете представление и затем изменяете среду обработки запроса, заменяя системные, которые могут влиять на результаты, которые Вы получаете от представления:

mysql> CREATE VIEW v (mycol) AS SELECT 'abc';Query OK, 0 rows affected (0.01 sec)mysql> SET sql_mode =
        '';Query OK, 0 rows affected (0.00 sec)mysql> SELECT "mycol"
        FROM v;+-------+| mycol |+-------+| mycol |+-------+1 row in set (0.01 sec)mysql> SET sql_mode = 'ANSI_QUOTES';Query OK, 0 rows affected (0.00 sec)mysql> SELECT "mycol" FROM v;+-------+| mycol |+-------+| abc   |+-------+1 row in set (0.00 sec)

DEFINER и SQL SECURITY пункты определяют, какая учетная запись MySQL использовать, проверяя права доступа на представление, когда оператор выполняется, это ссылается на представление. Допустимое SQL SECURITY характеристические значения DEFINER и INVOKER. Они указывают, что необходимые полномочия должны быть сохранены пользователем, который определил или вызвал представление, соответственно. Значение по умолчанию SQL SECURITY значение DEFINER.

Если a user значение дается для DEFINER пункт, это должна быть учетная запись MySQL, определенная как 'user_name'@'host_name' (тот же самый формат, используемый в GRANT оператор), CURRENT_USER, или CURRENT_USER(). Значение по умолчанию DEFINER значение является пользователем, который выполняется CREATE VIEW оператор. Это - то же самое как определение DEFINER = CURRENT_USER явно.

Если Вы определяете DEFINER пункт, эти правила определяют допустимое DEFINER пользовательские значения:

Для получения дополнительной информации о безопасности представления, см. Раздел 19.6, "Управление доступом для Сохраненных Программ и Представления".

В пределах определения представления, CURRENT_USER возвращает представление DEFINER значение по умолчанию. Для представлений, определенных с помощью SQL SECURITY INVOKER характеристика, CURRENT_USER возвращает учетную запись за invoker представления. Для получения информации о пользователе, контролирующем в пределах представлений, см. Раздел 6.3.12, "основанный на SQL MySQL Account Activity Auditing".

В пределах сохраненной подпрограммы, которая определяется с помощью SQL SECURITY DEFINER характеристика, CURRENT_USER возвращает подпрограмму DEFINER значение. Это также влияет на представление, определенное в пределах такой подпрограммы, если определение представления содержит a DEFINER значение CURRENT_USER.

Полномочия представления проверяются как это:

Пример: представление могло бы зависеть от сохраненной функции, и что функция могла бы вызвать другие сохраненные подпрограммы. Например, следующее представление вызывает сохраненную функцию f():

CREATE VIEW v AS SELECT * FROM t WHERE t.id = f(t.name);

Предположите это f() содержит оператор, такой как это:

IF name IS NULL then  CALL p1();ELSE  CALL p2();END IF;

Полномочия, требуемые для того, чтобы выполнить операторы в пределах f() потребность, которая будет проверена, когда f() выполняется. Это могло бы означать, что полномочия необходимы для p1() или p2(), В зависимости от пути выполнения в пределах f(). Те полномочия должны быть проверены во времени выполнения, и пользователь, который должен обладать полномочиями, определяется SQL SECURITY значения представления v и функция f().

DEFINER и SQL SECURITY пункты для представлений являются расширениями стандартного SQL. В стандартном SQL представления обрабатываются, используя правила для SQL SECURITY DEFINER. Стандарт говорит, что устройство определения представления, которое является тем же самым как владельцем схемы представления, получает применимые права на представлении (например, SELECT) и может предоставить им. У MySQL нет никакого понятия схемы "владелец", таким образом, MySQL добавляет пункт, чтобы идентифицировать устройство определения. DEFINER пункт является расширением, где намерение состоит в том, чтобы иметь то, что имеет стандарт; то есть, постоянная запись того, кто определил представление. Это то, почему значение по умолчанию DEFINER значение является учетной записью создателя представления.

Дополнительное ALGORITHM пункт является расширением MySQL стандартного SQL. Это влияет, как MySQL обрабатывает представление. ALGORITHM принимает три значения: MERGE, TEMPTABLE, или UNDEFINED. Алгоритм значения по умолчанию UNDEFINED если нет ALGORITHM пункт присутствует. Для получения дополнительной информации см. Раздел 19.5.2, "Алгоритмы Обработки Представления".

Некоторые представления обновляемы. Таким образом, можно использовать их в операторах такой как UPDATE, DELETE, или INSERT обновить содержание базовой таблицы. Для представления, чтобы быть обновляемым, должно быть непосредственное отношение между строками в представлении и строками в базовой таблице. Есть также определенные другие конструкции, которые делают представление необновляемым.

WITH CHECK OPTION пункт может быть дан для обновляемого представления, чтобы предотвратить, вставляет или обновляет к строкам кроме тех для который WHERE пункт в select_statement истина.

В a WITH CHECK OPTION пункт для обновляемого представления, LOCAL и CASCADED ключевые слова определяют контекст тестирования проверки, когда представление определяется с точки зрения другого представления. LOCAL ключевое слово ограничивает CHECK OPTION только к определяемому представлению. CASCADED заставляет проверки на базовые представления быть оцененными также. Когда никакое ключевое слово не дается, значение по умолчанию CASCADED.

Для получения дополнительной информации об обновляемых представлениях и WITH CHECK OPTION пункт, см. Раздел 19.5.3, "Обновляемый и Представления Insertable".