带有检查选项子句的视图
更新将导致该行为true(换句话说,它防止将可见行更新为不可见行)。
在WITH CHECK OPTION
可更新视图的子句中,当根据另一个视图定义该视图时,LOCAL
and 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'