一.what(什么是視圖?)
1.視圖是一種數據庫對象,是從一個或者多個數據表或視圖中導出的虛表,視圖所對應的數據並不真正地存儲在視圖中,而是存儲在所引用的數據表中,視圖的結構和數據是對數據表進行查詢的結果。
2.根據創建視圖時給定的條件,視圖可以是一個數據表的一部分,也可以是多個基表的聯合,它存儲了要執行檢索的查詢語句的定義,以便在引用該視圖時使用。
二.why(為什么要用視圖?視圖的優點)
1.簡化數據操作:視圖可以簡化用戶處理數據的方式。
2.着重於特定數據:不必要的數據或敏感數據可以不出現在視圖中。
3.視圖提供了一個簡單而有效的安全機制,可以定制不同用戶對數據的訪問權限。
4.提供向后兼容性:視圖使用戶能夠在表的架構更改時為表創建向后兼容接口。
5.自定義數據:視圖允許用戶以不同方式查看數據。
6.導出和導入數據:可使用視圖將數據導出到其他應用程序。
三.how(視圖的創建語法、刪除、demo)
CREATE [OR REPLACE] [FORCE|NOFORCE] VIEW view_name [(alias[, alias]...)] AS subquery [WITH CHECK OPTION [CONSTRAINT constraint]] [WITH READ ONLY]
OR REPLACE :若所創建的試圖已經存在,ORACLE自動重建該視圖; FORCE :不管基表是否存在ORACLE都會自動創建該視圖; NOFORCE :只有基表都存在ORACLE才會創建該視圖: alias :為視圖產生的列定義的別名; subquery :一條完整的SELECT語句,可以在該語句中定義別名; WITH CHECK OPTION :插入或修改的數據行必須滿足視圖定義的約束; WITH READ ONLY :該視圖上不能進行任何DML操作。
CREATE OR REPLACE VIEW dept_sum_vw (name,minsal,maxsal,avgsal) AS SELECT d.dname,min(e.sal),max(e.sal),avg(e.sal) FROM emp e,dept d WHERE e.deptno=d.deptno GROUP BY d.dname;
--給用戶授權創建視圖 -- grant create all view to zdgshr; 所有數據庫都能創建視圖的用戶 grant create view to zdgshr; --創建簡單視圖 create view temp as select * from zd_member_basic_info; --測試 select * from temp where rownum=1; --創建簡單視圖:只讀 create or replace view temp1 as select id,job_number,name,dept_id from zd_member_basic_info with read only; --測試 insert into temp1(id,job_number,name,dept_id) values(1,0,'張三',1300);
視圖的刪除:
DROP VIEW VIEW_NAME語句刪除視圖。
刪除視圖的定義不影響基表中的數據。
只有視圖所有者和具備DROP VIEW權限的用戶可以刪除視圖。
視圖被刪除后,基於被刪除視圖的其他視圖或應用將無效。
四、視圖分為簡單視圖和復雜視圖。
簡單視圖只從單表里獲取數據;復雜視圖從多表里獲取數據。
簡單視圖不包含函數和數據組;復雜視圖包含函數和數據組。
簡單視圖可以實現DML操作;復雜視圖不可以。
create or replace view temp1 as select distinct name,job_number,dept_id from zd_member_basic_info with read only; delete from zd_member_basic_info where name='而過';
create or replace view temp as select * from zd_member_basic_info order by name;