27.6.4 Оператор WITH CHECK OPTION для представления
Оператор WITH CHECK OPTION может быть указан для обновляемого представления, чтобы предотвратить вставки строк, для которых условие WITH CHECK OPTION в определении представления не выполняется. Также он предотвращает обновления строк, для которых условие WITH CHECK OPTION истинно, но обновление привело бы к тому, что оно стало ложным (другими словами, он предотвращает обновление видимых строк до невидимых).
В операторе WITH CHECK OPTION для обновляемого представления ключевые слова WITH и RECURSIVE определяют область проверки, когда представление определяется через другое представление. Если ни один из этих ключевых слов не указан, по умолчанию используется RECURSIVE.
Проверка WITH CHECK OPTION соответствует стандарту:
При использовании WITH, проверяется условие WITH CHECK OPTION представления, затем проверка рекурсивно распространяется на подлежащие представления и применяются те же правила.
При использовании WITH RECURSIVE, проверяется условие WITH CHECK OPTION представления, затем проверка рекурсивно распространяется на подлежащие представления, добавляется RECURSIVE к ним (для целей проверки; их определения остаются неизменными) и применяются те же правила.
Без указания опции проверки условие WITH CHECK OPTION представления не проверяется, затем проверка рекурсивно распространяется на подлежащие представления и применяются те же правила.
Рассмотрим определения таблицы и набора представлений:
CREATE TABLE t1 (a INT);
CREATE VIEW v1 AS SELECT * FROM t1 WHERE a < 2
WITH CHECK OPTION;
CREATE VIEW v2 AS SELECT * FROM v1 WHERE a > 0
WITH LOCAL CHECK OPTION;
CREATE VIEW v3 AS SELECT * FROM v1 WHERE a > 0
WITH CASCADED CHECK OPTION;
Здесь представления v2 и v3 определены через другое представление, v1.
Вставки для представления v2 проверяются против условия WITH CHECK OPTION представления, затем проверка рекурсивно распространяется на представление v1, и правила применяются снова. Правила для v1 приводят к ошибке проверки. Проверка для v3 также завершается ошибкой:
mysql> INSERT INTO v2 VALUES (2);
ERROR 1369 (HY000): CHECK OPTION failed 'test.v2'
mysql> INSERT INTO v3 VALUES (2);
ERROR 1369 (HY000): CHECK OPTION failed 'test.v3'
© 2025 Oracle
Licensed under the GPLv2 License.