目录
1、视图介绍
视图(View)是一种虚拟存在的表。视图中的数据并不在数据库中实际存在,行和列数据来自定义视图的查询中使用的表,并且是在使用视图时动态生成的。
通俗的讲,视图只保存了查询的SQL逻辑,不保存查询结果。所以我们在创建视图的时候,主要的工作就落在创建这条SQL查询语句上
2、创建、查询、修改、删除视图
2.1 创建视图
CREATE [OR REPLACE] VIEW 视图名称[(列名列表)] AS SELECT语句 [WITH[CASCADED | LOCAL] CHECK OPTION]
2.1.2 oracle 创建视图中怎么加动态where条件
CREATE OR REPLACE VIEW 视图名称[(列名列表)] AS SELECT语句 FROM 表名WHERE status = NVL(:name, name);
在上面的语法中,使用了NVL函数来检查传递给视图的参数值。如果参数值不为空,则使用参数值作为WHERE条件的值。否则,使用表中的原始值。
2.2 查询视图
查看创建视图语句:SHOW CREATE VIEW 视图名称
查看视图数据:SELECT * FROM 视图名称......
2.3 修改视图
方式一:CREATE [OR REPLACE] VIEW 视图名称[(列名列表)] AS SELECT语句 [WITH[CASCADED | LOCAL] CHECK OPTION]
方式二:ALTER VIEW 视图名称[(列名列表)] AS SELECT语句 [WITH[CASCADED | LOCAL] CHECK OPTION]
2.4 删除视图
DROP VIEW [IF EXISTS] 视图名称 [,视图名称]......
3、视图的检查选项
当使用WITH CHECK OPTION子句创建视图时,MySQL会通过视图检查正在更改的每个行,例如 插入、更新、删除、以及其符合视图的定义。MySQL允许基于另一个视图创建视图,它还会检查依赖视图中的规则以保持一致性。为了确定检查的范围,mysql提供了两个选项:
CASCADED 和 LOCAL ,默认值为 CASCADED。
3.1 CASCADED 检查选项
① create view v1 as select id,name from student where id <= 20
② create view v2 as select id,name from v1 where id >= 10 with cascaded check option;
③ create view v3 as select id,name from v2 where id <=15
(1)当操作v1这个视图时:由于创建视图语句①没有添加检查选项,不会检查where条件
(2)当操作v2这个视图时:由于创建视图语句② 添加了with cascaded check option 检查选项,它会检查当前操作是否满足v2视图中的where条件,由于v2视图依赖v1视图 ,相当于在v1视图上也加上了with cascaded check option,所以它也会检查当前操作是否满足v1中的where条件
(3)当操作v3这个视图时:由于创建视图语句③没有添加检查选项,不会检查where条件,但是依赖v2视图,去检查v2视图,由于创建视图语句② 添加了with cascaded check option 检查选项,它会检查当前操作是否满足v2中的where条件,由于v2视图依赖视图v1 ,相当于在v1视图上也加上了with cascaded check option,所以它也会检查当前操作是否满足v1中的where条件
3.2 LOCAL 检查选项
④ create view v4 as select id,name from student where id <= 20
⑤ create view v5 as select id,name from v4 where id >= 10 with local check option;
⑥ create view v6 as select id,name from v5 where id <=15
(1)当操作v4这个视图时:由于创建视图语句④没有添加检查选项,不会检查where条件
(2)当操作v5这个视图时:由于创建视图语句⑤ 添加了with local check option 检查选项,它会检查当前操作是否满足v5视图中的where条件,因为v5视图依赖v4视图 ,所以要去检查v4视图,由于v4视图没有定义检查选项,所以它不会检查当前操作是否满足v4中的where条件
(3)当操作v6这个视图时:由于创建视图语句⑥没有添加检查选项,不会检查where条件,但是依赖v5视图,去检查v5视图,由于创建视图语句⑤ 添加了with local check option 检查选项,它会检查当前操作是否满足v5视图中的where条件,因为v5视图依赖v4视图 ,所以要去检查v4视图,由于v4视图没有定义检查选项,所以它不会检查当前操作是否满足v4中的where条件
4、视图的更新
要使视图可更新,视图中的行于基础表中的行之间必须存在一对一的关系。如果视图包含一下任何一项,则该视图不可更新:
1. 聚合函数或窗口函数 (SUM()、MIN()、MAX()、COUTN()等)
2.DISTINCT
3. GROUP BY
4. HAVING
5. UNION 或者 UNION ALL
5、视图的作用
(1)简单
视图不仅可以简化用户对数据的理解,也可以简化他们的操作。那些被经常使用的查询可以被定义为视图,从而使得用户不必为以后的操作每次指定全部的条件。
(2)安全
数据库可以授权,但不能授权到数据库特定行和特定的列上。通过视图用户只能查询和修改他们能看到的数据
(3)数据独立
视图可以帮助用户屏蔽真实表结构变化带来的影响。(屏蔽了基表的变化对业务的影响)