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視圖描述「用戶擁有的」視圖的列(或表的列)