目录
当使用WITH CHECK OPTION子句创建视图时,MySQL会通过视图检查正在更改的每个行,例如 插入,更新,删除,以使其符合视图的定义。 MySQL允许基于另一个视图创建视图,它还会检查依赖视图中的规则以保持一致性。为了确定检查的范围,MySQL提供了两个选项: CASCADED 和 LOCAL,默认值为 CASCADED 。
- CREATE VIEW xx
- AS SELECT id,name
- FROM
- XXXX WHERE id <= 20
- WITH CASCADED CHECK OPTION;
意为“级联”。
比如,v2视图是基于v1视图的,如果在v2视图创建的时候指定了检查选项为 cascaded,但是v1视图创建时未指定检查选项。 则在执行检查时,不仅会检查v2,还会级联检查v2的关联视图v1。
具体来说,例如下面这条SQL语句:
- create view v1
- as
- select id,name
- from
- student where id <= 20;
其没有添加检查选项的子句,所以运行时并不会检查id <= 20;
再看下面这条:
- create view v2
- as
- select id,name
- from
- v1 where id >= 10
- with cascaded check option;
它是基于v1来建立视图的,并且添加了检查选项的子句,所以它会检测v2的id >= 10 ;又由于它是基于v1而创建的视图,cascaded会与之相连,所以也会检查v1的 id <= 20。
最后看这条:
- create view v3
- as
- select id,name
- from
- v2 where id <= 15;
v3是基于v2来建立视图的,v2又是基于v1来建立视图的;又因为v3本身没有添加检查选项的子句,所以只会检测v2和v1的条件。
意为 本地。
比如,v2视图是基于v1视图的,如果在v2视图创建的时候指定了检查选项为 local ,但是v1视图创
建时未指定检查选项。 则在执行检查时,知会检查v2,不会检查v2的关联视图v1。
具体来说,
- -- 创建v1视图
- create view v1
- as
- select id,name
- from
- student where id <= 15;
-
-
- -- 创建v2视图
- create view v2
- as
- select id,name
- from
- v2 where id >= 10
- with local check option;
创建v1视图没有指定检查选项,创建v2视图时(基于v1)指定了local的检查选项;那么会对v2进行条件检测,然后递归到v1;由于v1本身没有指定检查选项,所以不进行检测,这就是local的检查选项。
再来创建v3:
- create view v3
- as
- select id,name
- from v2 where id < 20;
v3本身没有指定检查选项,所以不检测;递归到v2,v2有local的检查选项,进行检测;再递归到v1,没有检查选项,不进行检测。
END
学习自:黑马程序员——MySQL数据库课程