### 25.5.4 带有检查选项的视图子句

这`带检查选项`可以为可更新视图提供子句，以防止插入`在哪里`条款中的*`选择语句`*不是真的。它还可以防止更新`在哪里`子句为真，但更新会导致它不为真（换句话说，它会阻止可见行被更新为不可见行）。

在一个`带检查选项`可更新视图的子句，`当地的`和`级联`当视图是根据另一个视图定义时，关键字确定检查测试的范围。当两个关键字都没有给出时，默认为`级联`.

`带检查选项`测试符合标准：

-   和`当地的`， 风景`在哪里`子句被检查，然后检查递归到底层视图并应用相同的规则。

-   和`级联`，景色`哪里`子句，然后检查递归到基础视图，添加`带有级联检查选项`（为了检查的目的，它们的定义保持不变），并应用相同的规则。

-   如果没有选中选项，视图`哪里`子句，则检查将递归到基础视图，并应用相同的规则。

    考虑下表和视图集合的定义：


```
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选项，则检查将递归到`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'
```
