27.5.4 Оператор WITH CHECK OPTION для представлений
Оператор WITH CHECK OPTION может быть задан для обновляемого представления, чтобы предотвратить вставки строк, для которых условие CHECK в select_statement не выполняется. Он также предотвращает обновление строк, для которых условие CHECK выполняется, но обновление приведет к тому, что оно перестанет выполняться (другими словами, он предотвращает обновление видимых строк до невидимых).
В операторе WITH CHECK OPTION для обновляемого представления ключевые слова LOCAL и CASCADED определяют область проверки, когда представление определяется через другое представление. Если ни одно из ключевых слов не задано, по умолчанию используется CASCADED.
Проверка с использованием WITH CHECK OPTION соответствует стандарту:
При использовании RECURSIVE, проверяется условие CHECK представления
WHERE, затем проверка рекурсивно распространяется на подлежащие представления и применяется те же правила.При использовании NO RECURSIVE, проверяется условие CHECK представления
WHERE, затем проверка рекурсивно распространяется на подлежащие представления, добавляютсяWITH CASCADED CHECK OPTIONк ним (для целей проверки; их определения остаются без изменений), и применяются те же правила.При отсутствии опции CHECK, условие CHECK представления
WHEREне проверяется, затем проверка рекурсивно распространяется на подлежащие представления и применяются те же правила.
Рассмотрим определения для следующей таблицы и набора представлений:
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 проверяются по опции CHECK представлении LOCAL, затем проверка рекурсивно распространяется на 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.