oracle-视图(view)

一、视图的定义

视图也称为虚表,视图本身不占用物理存储空间,视图存放于数据字典中,简单的来说视图可以看做是sql语句的集合。视图从数据库中的表产生,这些表称为视图的基表,一个视图可以从另一个视图中产生。

视图看上去非常象数据库的物理表,对它的操作同任何其它的表一样。当通过视图修改数据时,实际上是在改变基表中的数据;相反地,基表数据的改变也会自动反映在由基表产生的视图中。由于逻辑上的原因,有些Oracle视图可以修改对应的基表,有些则不能(仅仅能查询)。

tips:对视图的查询没有限制,对视图的插入、删除、更新一般会有限制,所以为防止通过视图来修改基表的数据可以将视图创建为只读(带with read only)

二、视图的作用

  1)提供各种数据表现形式, 可以使用各种不同的方式将基表的数据展现在用户面前, 以便符合用户的使用习惯(主要手段: 使用别

名);

  2)隐藏数据的逻辑复杂性并简化查询语句, 多表查询语句一般是比较复杂的, 而且用户需要了解表之间的关系, 否则容易写错; 如果

  基于这样的查询语句创建一个视图, 用户就可以直接对这个视图进行"简单查询"而获得结果. 这样就隐藏了数据的复杂性并简化了查询语句.

  这也是oracle提供各种"数据字典视图"的原因之一,all_constraints就是一个含有2个子查询并连接了9个表的视图(在catalog.sql中定义);

  3)执行某些必须使用视图的查询. 某些查询必须借助视图的帮助才能完成. 比如, 有些查询需要连接一个分组统计后的表和另一

  表, 这时就可以先基于分组统计的结果创建一个视图, 然后在查询中连接这个视图和另一个表就可以了;

  4)提供某些安全性保证. 视图提供了一种可以控制的方式, 即可以让不同的用户看见不同的列, 而不允许访问那些敏感的列, 这样就可

以保证敏感数据不被用户看见;

  5)简化用户权限的管理. 可以将视图的权限授予用户, 而不必将基表中某些列的权限授予用户, 这样就简化了用户权限的定义。

  三、视图创建

  SQL> create view vw_emp as select empno,ename,job,hiredate,deptno from emp;

 

 

  SQL> select * from vw_emp where deptno=10;

    MPNO ENAME JOB HIREDATE DEPTNO

----------     ---------- --------- ---------

    7782  CLARK  MANAGER   09-JUN-81  10

    7839  KING   PRESIDENT   17-NOV-81  10

    7934  MILLER  CLERK     23-JAN-82  10

  对简单视图进行DML操作:

  SQL> insert into vw_emp values(1,'a','aa','05-JUN-88',10);
  SQL> update vw_emp set ename='cc' where ename='KING';
  SQL> delete vw_emp where ename='cc';
  SQL> select * from vw_emp where deptno=10

        EMPNO ENAME      JOB       HIREDATE      DEPTNO
        ---------- ---------- --------- --------- ---------
          7782 CLARK      MANAGER   09-JUN-81         10
          7934 MILLER     CLERK     23-JAN-82         10
             1 a          aa        05-JUN-88         10

  基表也发生了相应的更改:

  SQL> select empno,ename,job,hiredate,deptno from emp where deptno=10;

   创建只读视图:

  SQL> create view vw_emp_readonly as select empno,ename,job,hiredate,deptno from emp with read only;

  删除视图:

  可以删除当前模式中的任何视图;
    如果要删除其他模式中的视图,必须拥有DROP ANY VIEW系统权限;
    视图被删除后,该视图的定义会从词典中被删除,并且在该视图上授予的“权限”也将被删除。视图被删除后,其他引用该视图的视图及存储过程等都会失效。

  drop view vw_test;

  四、查看视图:

  使用数据字典视图
  1 dba_views——DBA视图描述数据库中的所有视图
  2 all_views——ALL视图描述用户“可访问的”视图
  3 user_views——USER视图描述“用户拥有的”视图
  4 dba_tab_columns——DBA视图描述数据库中的所有视图的列(或表的列)
  5 all_tab_columns——ALL视图描述用户“可访问的”视图的列(或表的列)
  6 user_tab_columns——USER视图描述“用户拥有的”视图的列(或表的列)

 

 

 

 

 

 

posted @ 2017-07-27 19:35  hj_oop  阅读(4662)  评论(0编辑  收藏  举报