• 首页
  • vue
  • TypeScript
  • JavaScript
  • scss
  • css3
  • html5
  • php
  • MySQL
  • redis
  • jQuery
  • 带有检查选项子句的视图

    更新将导致该行为true(换句话说,它防止将可见行更新为不可见行)。

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

    WITH CHECK OPTION测试符合标准:

    • 使用LOCAL,将WHERE检查view 子句,然后检查对基础视图的递归并应用相同的规则。
    • 使用CASCADED,将WHERE检查view 子句,然后检查对基础视图的递归,将WITH CASCADED CHECK OPTION其添加到基础视图中(出于检查目的;其定义保持不变),并应用相同的规则。
    • 如果没有检查选项,则不检查view 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'