带有检查选项子句的视图
更新将导致该行为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 v1AS SELECT *FROM t1WHERE a < 2WITH CHECK OPTION ;CREATE VIEW v2AS SELECT *FROM v1WHERE a > 0WITH LOCAL CHECK OPTION ;CREATE VIEW v3AS SELECT *FROM v1WHERE a > 0WITH CASCADED CHECK OPTION ;
此处v2和v3视图是根据另一个视图定义的v1。
v2将根据其LOCAL检查选项检查的插入,然后将检查重复到v1并再次应用规则。v1导致检查失败的规则。的检查v3也失败:
mysql>INSERT INTO v2VALUES (2); ERROR 1369 (HY000): CHECK OPTION failed 'test.v2' mysql>INSERT INTO v3VALUES (2); ERROR 1369 (HY000): CHECK OPTION failed 'test.v3'
