1、视图的定义sql
视图也称为虚表,视图自己不占用物理存储空间,视图存放于数据字典中,简单的来讲视图能够看作是sql语句的集合。视图从数据库中的表产生,这些表称为视图的基表,一个视图能够从另外一个视图中产生。数据库
视图看上去很是象数据库的物理表,对它的操做同任何其它的表同样。当经过视图修改数据时,其实是在改变基表中的数据;相反地,基表数据的改变也会自动反映在由基表产生的视图中。因为逻辑上的缘由,有些Oracle视图能够修改对应的基表,有些则不能(仅仅能查询)。安全
tips:对视图的查询没有限制,对视图的插入、删除、更新通常会有限制,因此为防止经过视图来修改基表的数据能够将视图建立为只读(带with read only)oracle
2、视图的做用spa
1)提供各类数据表现形式, 可使用各类不一样的方式将基表的数据展示在用户面前, 以便符合用户的使用习惯(主要手段: 使用别orm
名);ip
2)隐藏数据的逻辑复杂性并简化查询语句, 多表查询语句通常是比较复杂的, 并且用户须要了解表之间的关系, 不然容易写错; 若是it
基于这样的查询语句建立一个视图, 用户就能够直接对这个视图进行"简单查询"而得到结果. 这样就隐藏了数据的复杂性并简化了查询语句.form
这也是oracle提供各类"数据字典视图"的缘由之一,all_constraints就是一个含有2个子查询并链接了9个表的视图(在catalog.sql中定义);test
3)执行某些必须使用视图的查询. 某些查询必须借助视图的帮助才能完成. 好比, 有些查询须要链接一个分组统计后的表和另外一
表, 这时就能够先基于分组统计的结果建立一个视图, 而后在查询中链接这个视图和另外一个表就能够了;
4)提供某些安全性保证. 视图提供了一种能够控制的方式, 便可以让不一样的用户看见不一样的列, 而不容许访问那些敏感的列, 这样就可
以保证敏感数据不被用户看见;
5)简化用户权限的管理. 能够将视图的权限授予用户, 而没必要将基表中某些列的权限授予用户, 这样就简化了用户权限的定义。
3、视图建立
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;
4、查看视图:
使用数据字典视图 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视图描述“用户拥有的”视图的列(或表的列)