文档主页
MySQL 9.0 参考手册
相关文档 下载本手册
PDF (US Ltr) - 40.0Mb
PDF (A4) - 40.1Mb
手册页 (TGZ) - 258.2Kb
手册页 (Zip) - 365.3Kb
信息 (Gzip) - 4.0Mb
信息 (Zip) - 4.0Mb


MySQL 9.0 参考手册  /  ...  /  视图的 WITH CHECK OPTION 子句

27.6.4 视图的 WITH CHECK OPTION 子句

可更新视图可以使用 WITH CHECK OPTION 子句来防止插入不符合 select_statementWHERE 子句的行。它还可以防止更新符合 WHERE 子句但更新后将导致其不符合的行(换句话说,它可以防止将可见行更新为不可见行)。

在可更新视图的 WITH CHECK OPTION 子句中,当视图根据另一个视图定义时,LOCALCASCADED 关键字确定检查测试的范围。如果未指定任何关键字,则默认为 CASCADED

WITH CHECK OPTION 测试符合标准

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

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

  • 如果没有检查选项,则不会检查视图 WHERE 子句,然后递归检查基础视图并应用相同的规则。

考虑以下表和视图集的定义

Press CTRL+C to copy
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 定义。

将根据其 LOCAL 检查选项检查 v2 的插入,然后递归检查 v1 并再次应用规则。对 v1 的规则会导致检查失败。对 v3 的检查也会失败

Press CTRL+C to copy
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'