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

19.5.3. Обновляемый и Представления Insertable

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

Относительно insertability (являющийся обновляемым с INSERT операторы), обновляемое представление является insertable, если это также удовлетворяет эти дополнительные требования для столбцов представления:

Представление, у которого есть соединение простых ссылок столбца и полученных столбцов, не является insertable, но это может быть обновляемо, если Вы обновляете только те столбцы, которые не получаются. Рассмотрите это представление:

CREATE VIEW v AS SELECT col1, 1 AS col2 FROM t;

Это представление не является insertable потому что col2 получается из выражения. Но это обновляемо, если обновление не пытается обновить col2. Это обновление допустимо:

UPDATE v SET col1 = 0;

Это обновление не допустимо, потому что оно пытается обновить полученный столбец:

UPDATE v SET col2 = 0;

Для многократного табличного представления иногда возможно быть обновляемым, предполагая, что это может быть обработано с MERGE алгоритм. Для этого, чтобы работать, представление должно использовать внутреннее объединение (не внешнее объединение или a UNION). Кроме того, только единственная таблица в определении представления может быть обновлена, таким образом, SET пункт должен назвать только столбцы от одной из таблиц в представлении. Представления то использование UNION ALL не разрешаются даже при том, что они могли бы быть теоретически обновляемыми, потому что реализация использует временные таблицы, чтобы обработать их.

Для многократно-табличного обновляемого представления, INSERT может работать, если это вставляет в единственную таблицу. DELETE не поддерживается.

INSERT DELAYED не поддерживается для представлений.

Если таблица содержит AUTO_INCREMENT столбец, вставляя в insertable просматривает на таблице, которая не включает AUTO_INCREMENT столбец не изменяет значение LAST_INSERT_ID(), потому что побочные эффекты вставки значений по умолчанию в столбцы не часть представления не должны быть видимыми.

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

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

mysql> CREATE TABLE t1 (a INT);mysql> CREATE VIEW v1 AS SELECT * FROM t1 WHERE a < 2    -> WITH CHECK OPTION;mysql> CREATE
        VIEW v2 AS SELECT * FROM v1 WHERE a > 0    -> WITH LOCAL
        CHECK OPTION;mysql> CREATE VIEW v3 AS SELECT * FROM v1 WHERE
        a > 0    -> WITH CASCADED CHECK
        OPTION;

Здесь v2 и v3 представления определяются с точки зрения другого представления, v1. v2 имеет a LOCAL проверьте опцию, таким образом, вставки тестируются только против v2 проверить. v3 имеет a CASCADED проверьте опцию, таким образом, вставки тестируются не только против ее собственной проверки, но и против таковых из базовых представлений. Следующие операторы иллюстрируют эти различия:

mysql> INSERT INTO v2 VALUES (2);Query OK, 1 row affected (0.00 sec)mysql> INSERT INTO v3 VALUES (2);ERROR 1369 (HY000): CHECK OPTION failed 'test.v3'

MySQL устанавливает флаг, названный представлением updatability флаг, в CREATE VIEW время. Флаг устанавливается в YES (истина), если UPDATE и DELETE (и подобные операции), являются законными для представления. Иначе, флаг устанавливается в NO (ложь). IS_UPDATABLE столбец в INFORMATION_SCHEMA.VIEWS таблица выводит на экран состояние этого флага. Это означает, что сервер всегда знает, обновляемо ли представление. Если представление не обновляемо, операторы такой UPDATE, DELETE, и INSERT недопустимы и будет отклонен. (Отметьте, что, даже если представление обновляемо, не могло бы быть возможно вставить в это, как описано в другом месте в этом разделе.)

На updatability представлений может влиять значение updatable_views_with_limit системная переменная. См. Раздел 5.1.4, "Системные Переменные Сервера".