视图-View

  视图是一个虚拟表,由存储的查询构成,可以将它的输出看成一个表。但是视图并不在数据库中存储数据值,其数据来自定义视图的查询语句所引用的表,数据库只在数据字典中存储视图的定义信息。

  视图具有以下优点:

  • 可以限制用户只能通过视图检索数据。这样就可以对最终用户屏蔽建表时底层的基表。
  • 可以将复杂的查询保存为视图。可以对最终用户屏蔽一定的复杂性。
  • 限制某个视图只能访问基表中的部分列或者部分行的特定数据。这样可以实现一定的安全性。
  • 从多张基表中按一定的业务逻辑抽出用户关心的部分,形成一张虚拟表。

创建视图

CREATE [OR REPLACE] [FORCE|NOFORCE] VIEW view_name
    [(alias[, alias]...)]

AS subquery
     [WITH CHECK OPTION [CONSTRAINT constraint]]
     [WITH READ ONLY]

  OR REPLACE:若所创建的试图已经存在,则替换旧视图;

  FORCE:不管基表是否存在ORACLE都会自动创建该视图(即使基表不存在,也可以创建该视图,但是该视图不能正常使用,当基表创建成功后,视图才能正常使用);

  NOFORCE:如果基表不存在,无法创建视图,该项是默认选项(只有基表都存在ORACLE才会创建该视图)。

  alias:为视图产生的列定义的别名;

  subquery  :一条完整的SELECT语句,可以在该语句中定义别名;

  WITH CHECK OPTION :插入或修改的数据行必须满足视图定义的约束;

  WITH READ ONLY :默认可以通过视图对基表执行增删改操作,但是有很多在基表上的限制(比如:基表中某列不能为空,但是该列没有出现在视图中,则不能通过视图执行insert操作),WITH READ ONLY说明视图是只读视图,不能通过该视图进行增删改操作。现实开发中,基本上不通过视图对表中的数据进行增删改操作。

  1、简单视图

create or replace view emp_view as
select empno,ename,job,deptno
from emp
where deptno = 20;

  2、创建只读视图

create or replace view emp_view_readonly as
    select * from dept
    where deptno != 60
with read only;

  3、复杂视图

create or replace view emp_view_complex as
    select deptno 部门编号,max(sal) 最高工资,min(sal) 最低工资,avg(sal) 平均工资 from emp
  group by deptno;

  4、连接视图

create or replace view emp_view_union as
  select d.dname,d.loc,e.empno,e.ename
  from emp e,dept d
  where e.deptno = d.deptno and d.deptno = 20;

查看视图定义

      前面介绍过,数据库并不存储视图中数值,而是存储视图的定义信息。用户可以通过查询数据字典视图USER_VIEWS,已获得视图的定义信息。

修改视图定义

      建立视图后,如果要改变视图所对应的子查询语句,则可以执行CREATE OR REPLACE VIEW语句 

重新编译视图

      视图被创建后,如果用户修改了视图所依赖的基本表定义,则该视图会被标记为无效状态。当用户访问视图时,Oracle会自动重新编译视图。

  ALTER VIEW... COMPILE 

删除视图

      当视图不再需要时,用户可以执行DROP VIEW语句删除视图。用户可以直接删除其自身模式中的视图,但如果要删除其它用户模式中的视图,要求该用户必须具有DROP ANY VIEW 系统权限。

 

 

posted @ 2021-04-10 15:21  Tiger-Adan  阅读(440)  评论(0编辑  收藏  举报