Spec-Zone.ru › MySQL 8.4

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.
https://docs.oracle.com/cd/E17952_01/mysql-8.4-en/view-check-option.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API