CREATE VIEW v AS SELECT col1, 1 AS col2 FROM t;
Этот view не вставляемый, потому что col2 получен из выражения. Но это обновляемый view, если модификация не пробует менять col2. Эта модификация допустима:
UPDATE v SET col1 = 0;
А вот эта модификация уже не допустима, потому что она пытается модифицировать полученный столбец:
UPDATE v SET col2 = 0;
Для мультитабличного view иногда есть возможность обновляться, если это обрабатывается через алгоритм MERGE. Для этого view должен использовать внутреннее объединение (не внешнее объединение или UNION). Также, только одиночная таблица в определении view может модифицироваться, так что предложение SET должно называть только столбцы одной из таблиц в view. Views, которые используют UNION ALL отвергнуты даже при том, что они могли бы быть теоретически обновляемыми, потому что реализация использует временные таблицы, чтобы обработать их.
Для мультитабличного обновляемого view, INSERT может работать, если это вставляет в одиночную таблицу. DELETE не обеспечивается вообще.
Предложение WITH CHECK OPTION может быть дано для обновляемого view, чтобы предотвратить вставки или модификации в строки за исключением тех, для которых предложение WHERE в select_statement истинно.
В предложении WITH CHECK OPTION для обновляемого view ключевые слова LOCAL и CASCADED определяют контекст тестирования проверки, когда view определен в терминах другого view. Ключевое слово ограничивает LOCAL CHECK OPTION только определяемым view. CASCADED задает проверку для основных view, которые также будут оценены. Когда никакое ключевое слово не дано, значение по умолчанию: CASCADED. Рассмотрите определения для следующей таблицы и набора view:
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;
Здесь view v2 и v3 определены в терминах другого view, а именно v1. v2 имеет опцию проверки LOCAL, так что вставки проверены только для v2. v3 имеет опцию проверки CASCADED, так что вставки проверены не только по собственной проверки, но и для таковых основных view. Следующие инструкции иллюстрируют эти различия:
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'
На обновляемость view можно воздействовать значением переменной системы updatable_views_with_limit. Команда CREATE VIEW была добавлена в MySQL 5.0.1. WITH CHECK OPTION было выполнено в MySQL 5.0.2.
DROP VIEW [IF EXISTS]
view_name [, view_name ] …
[RESTRICT | CASCADE]
DROP VIEW удаляет один или большее количество view. Вы должны иметь привилегию DROP для каждого view. Если любой из view, именованных в списке параметров не существует, MySQL возвращает индикацию ошибки с именем, которые не существует, но удаляет все view в списке, которые существуют.
Предложение IF EXISTS предотвращает ошибку для просмотров, которые не существуют. Когда это предложение дано, NOTE будет сгенерировано для каждого несуществующего view.
RESTRICT и CASCADE, если заданы, анализируются и игнорируются. Эта инструкция была добавлена в MySQL 5.0.1.
7.4.1: Имеется ли форум для обсуждения MySQL Views?
Да. http://forums.mysql.com/list.php?100 Алексей В. Паутов MySQL: руководство профессионала Введение Это не совсем книга. Просто по ходу работы и изучения пакета у меня накопилось немало заметок, которые я в конце концов собрал воедино и опубликовал с оглавлением и под единым названием. Данные заметки относятся к версиям 4 и 5 пакета MySQL. По ходу текста особо отмечены места, относящиеся к специфической версии пакета. Необходимо также отметить, что эти заметки логически продолжают книгу MySQL: Руководство администратора и ориентированы на ту же аудиторию. Данный материал подготовлен Паутовым Алексеем в рамках некоммерческого проекта RussianLDP:MySQL. При любом использовании ссылка на автора и проект обязательна!
7.4.2: Что случается с view, если основная таблица удалена или переименована?
После создания view, возможно удалить или изменить таблицу (или view), к которому обращается определение. Чтобы проверять определение view для выявления проблем этого вида, используйте инструкцию CHECK TABLE.
7.4.3: MySQL 5.1 имеет кадры таблицы?
Нет.
7.4.4: MySQL 5.1 имеет осуществленные views?
Нет.
7.4.5: Можно ли вставлять во views, которые основаны на объединениях?
Это возможно, если Ваша инструкция INSERT имеет список столбцов, который прояснит, что имеется только одна включаемая таблица. Вы не можете вставлять в много таблиц одиночной вставкой на view.
Читать дальше