Related Documentation Download this Manual
PDF (US Ltr) - 40.8Mb
PDF (A4) - 40.9Mb
Man Pages (TGZ) - 294.0Kb
Man Pages (Zip) - 409.0Kb
Info (Gzip) - 4.0Mb
Info (Zip) - 4.0Mb
Excerpts from this Manual

MySQL 8.3 Reference Manual  /  ...  /  The View WITH CHECK OPTION Clause

27.5.4 视图 WITH CHECK OPTION 子句

WITH CHECK OPTION 子句可以用于可更新视图,以防止插入不满足 WHERE 子句的行的插入。它还防止更新使得 WHERE 子句为 true 的行变为不 true 的行(换言之,防止可见行被更新为不可见行)。

在可更新视图的 WITH CHECK OPTION 子句中,LOCALCASCADED 关键字确定视图定义时的检查范围。当没有给出关键字时,默认为 CASCADED

WITH CHECK OPTION 测试是标准兼容的:

  • 使用 LOCAL,视图 WHERE 子句被检查,然后检查递归到基础视图,并应用相同的规则。

  • 使用 CASCADED,视图 WHERE 子句被检查,然后检查递归到基础视图,添加 WITH CASCADED CHECK OPTION(用于检查目的;它们的定义保持不变),并应用相同的规则。

  • 没有检查选项时,视图 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;

这里,v2v3 视图是根据另一个视图 v1 定义的。

v2 的插入将根据其 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'