一、視圖的定義 視圖也稱為虛表,視圖本身不占用物理存儲空間,視圖存放於數據字典中,簡單的來說視圖可以看做是sql語句的集合。視圖從資料庫中的表產生,這些表稱為視圖的基表,一個視圖可以從另一個視圖中產生。 視圖看上去非常象資料庫的物理表,對它的操作同任何其它的表一樣。當通過視圖修改數據時,實際上是在改 ...
一、視圖的定義
視圖也稱為虛表,視圖本身不占用物理存儲空間,視圖存放於數據字典中,簡單的來說視圖可以看做是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視圖描述“用戶擁有的”視圖的列(或表的列)