Spec-Zone.ru › MySQL 9.2

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

Spec-Zone.ru

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