Spec-Zone .ru
спецификации, руководства, описания, API
|
CREATE [OR REPLACE] [ALGORITHM = {UNDEFINED | MERGE | TEMPTABLE}] [DEFINER = {user
| CURRENT_USER }] [SQL SECURITY { DEFINER | INVOKER }] VIEWview_name
[(column_list
)] ASselect_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 |+------+-------+-------+
Определение представления подвергается следующим ограничениям:
SELECT
оператор не может содержать подзапрос в FROM
пункт.
SELECT
оператор не может обратиться к пользовательским переменным или
системе.
В пределах сохраненной программы определение не может отнестись к параметрам программы или локальным переменным.
SELECT
оператор не может обратиться к готовым параметрам операторов.
Любая таблица или представление, упомянутое в определении, должны существовать.
Однако, после того, как представление было создано, возможно отбросить таблицу или представление, что
определение относится к. В этом случае использование представления приводит к ошибке. Чтобы проверить
определение представления на проблемы этого вида, используйте CHECK TABLE
оператор.
Определение не может отнестись к a TEMPORARY
таблица,
и невозможно создать a TEMPORARY
представление.
Во время определения должны существовать любые таблицы, названные в определении представления.
Невозможно связать триггер с целью.
Псевдонимы для имен столбцов в SELECT
оператор проверяется по максимальной длине столбца 64 символов (не
максимальная длина псевдонима 256 символов).
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
пользовательские значения:
Если Вы не имеете SUPER
полномочие, единственное допустимое user
значение является Вашей собственной учетной записью, или определенной буквально или при использовании CURRENT_USER
. Невозможно установить устройство определения в
некоторую другую учетную запись.
Если Вы имеете SUPER
полномочие, можно определить любое синтаксически допустимое имя
учетной записи. Если учетная запись фактически не существует, предупреждение сгенерировано.
Хотя возможно создать представление с несуществующим DEFINER
учетная запись, ошибка происходит, когда на представление ссылаются
если SQL SECURITY
значение 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
.
Полномочия представления проверяются как это:
Во время определения представления создателю представления нужно было нуждаться в
полномочиях, чтобы использовать высокоуровневые объекты, к которым получает доступ представление.
Например, если определение представления ссылается на столбцы таблицы, у создателя должно быть некоторое
полномочие для каждого столбца в списке выборки определения, и SELECT
полномочие для каждого столбца, используемого в другом месте в
определении. Если определение относится к сохраненной функции, только полномочия должны были вызвать
функцию, может быть проверен. Полномочия, требуемые во время вызова функции, могут быть проверены
только, поскольку оно выполняется: Для различных вызовов могли бы быть взяты различные пути выполнения в
пределах функции.
У пользователя, который ссылается на представление, должны быть соответствующие
полномочия получить доступ к нему (SELECT
выбрать из этого, INSERT
вставить в это, и т.д.)
Когда на представление сослались, полномочия для объектов, к которым получает
доступ представление, проверяются по полномочиям, сохраненным представлением DEFINER
учетная запись или invoker, в зависимости от ли SQL SECURITY
характеристика
DEFINER
или INVOKER
, соответственно.
Если ссылка на представление вызывает выполнение сохраненной функции, проверка
полномочия операторы, выполняемые в пределах функции, зависят от ли функция SQL
SECURITY
характеристика DEFINER
или INVOKER
.
Если характеристика безопасности DEFINER
, функция работает с полномочиями
DEFINER
учетная запись. Если характеристика INVOKER
, функция работает с полномочиями, определенными представлением
SQL SECURITY
характеристика.
Пример: представление могло бы зависеть от сохраненной функции, и что функция могла бы вызвать другие
сохраненные подпрограммы. Например, следующее представление вызывает сохраненную функцию 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".