Oracle 資料庫檢視與基表的關係
一:首先解釋什麼是檢視:檢視其實就是一條查詢sql語句,用於顯示一個或多個表或其他檢視中的相關資料。檢視將一個查詢的結果作為一個表來使用,因此檢視可以被看作是儲存的查詢或一個虛擬表,與真實表不同,檢視不會要求分配儲存空間,檢視中也不會包含實際的資料。檢視只是定義了一個查詢,檢視中的資料是從基表中獲取,這些資料在檢視被引用時動態的生成。由於檢視基於資料庫中的其他物件,因此一個檢視只需要佔用資料字典中儲存其定義的空間,而無需額外的儲存空間,並且基表的變化會導致檢視相應的改變。
二:檢視的建立:
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操作。
三:檢視的修改:直接利用前邊建立時的or replaece 重建即可。
四:檢視上的DML 操作:
1,一般簡單檢視,也就是基表只有一個的檢視,是可以透過修改檢視來修改基表的,
Oracle是可以透過檢視來修改Base table的。所謂base table就是用來構建檢視的表,也就是檢視的資料來源表。但是這種修改是有條件的。比如:
create view v_emp as select empno,ename,job,deptno from emp where deptno=10 with check option constraint emp_cnst;
如果有這個限制,那麼透過檢視v_emp 插入資料的deptno欄位的值必須是10,否則就會報“ORA-01402: 檢視 WITH CHECK OPTIDN 違反 where 子句”的異常。
2.針對複雜檢視,也就是基表有多個表,透過內連線查詢建立的檢視,只能透過檢視來修改key_preserved表,
什麼是Key-Preserved Table呢.Oracle給出的定義是:
A table is key preserved if every key of the table can also be a key of the result of the join.
It is not necessary that the key or keys of a table be selected for it to be key preserved.
It is sufficient that if the key or keys were selected, then they would also be key(s) of the result of the join.
如果某一個表的主鍵可以作為這個join結果(view通常是幾個表的join結果)的主鍵,那麼這個表就是key preserved table.
這個表的主鍵並非一定要出現在select出來的結果集中(select list裡面),但是如果其出現在結果集中,那麼它必須可以滿足作為這個結果集的主鍵的要求.
透過下面的例子來解釋:
create view liuwenhe as select e.ename, e.empno, e.job, d.deptno, d.dname from emp e,dept d where e.empno in (10,30) and e.deptno = d.deptno; emp表的主鍵是empno,dept表的主鍵是deptno,
可以看出來emp表的主鍵empno的值是唯一的,並且非空,所以是可以做查詢結果集的主鍵的,但是結果集的dempno的值就不一定唯一了。所以這個檢視的key_preserved表是emp,
五;檢視的作用:減少複雜性和增強安全性。
1.檢視可以隱藏你的查詢的複雜性,例如:
SELECT d.dname,count(*) as NUM_EMPS
FROM emp e, dept d
WHERE e.deptno=d.deptno
GROUP BY dname;
不需要輸入如此複雜的查詢(按照今天的標準來說,那其實並不算是複雜),我可以查詢如下的一個檢視:
SELECT dname,num_emps FROM my_view; (前提是你建立了基於上面查詢的檢視)
你也能夠將好多相當複雜的查詢儲存為一個檢視,這樣就會將查詢大大的簡化。透過這種方式,檢視就是一種宏,它可以在幕後做許多事情,並使得這個過程讓終端使用者或者應用程式看起來非常簡單。
2,檢視也可以用於加強安全性。讓我們假設一下,我只想要使用者BOB看到EMP表中的ENAME 和DEPNO兩個列。我可以使用如下所示:
GRANT select ON emp TO bob;
但是上面的命令會使BOB看到表的全部內容。我可以寫下如下的一個檢視,使BOB只看到自己能夠看到的列:
CREATE VIEW bob_emp AS SELECT ename,deptno FROM emp; GRANT select ON bob_emp TO bob;
透過這兩條命令,BOBO只能在檢視中看到這個表中的兩個列。
讓我們更進一步的討論一下安全性的概念。假設我們想要使得每個人都可以查詢EMP表,但是隻是他們自己的記錄。我可以寫出如下的檢視:
CREATE VIEW my_emp AS SELECT * FROM emp WHERE ename=USER; GRANT select ON my_emp TO public;
當一個使用者查詢MY_EMP表示,上述檢視只會返回那些ENAME列值為他們自己的使用者名稱
3.Oracle檢視非常強大的功能之一在於其可以創 建一個帶有錯誤的檢視。比如說檢視裡的欄位在基表裡不存在,該檢視仍然可以建立成功,但是非法的且無法執行。當基表裡加入了該欄位,或者說某個欄位修改成 檢視裡的該欄位名稱,那麼檢視馬上就可以成為合法的。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/31397003/viewspace-2137306/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Oracle 資料庫字典 檢視 基表Oracle資料庫
- MySQL 檢視資料庫中有主外來鍵關係的表資訊MySql資料庫
- oracle資料字典表與檢視Oracle
- SCN號與oracle資料庫恢復的關係Oracle資料庫
- 資料庫入門之3張表對比關係型與非關係型資料庫資料庫
- 關係型資料庫與非關係型資料庫介紹!資料庫
- oracle控制檔案與資料庫啟動的關係Oracle資料庫
- (轉)SCN號與oracle資料庫恢復的關係Oracle資料庫
- 架構與資料庫的關係架構資料庫
- 資料庫 - 關係代數與關係運算資料庫
- 達夢資料庫建立檢視&MyBatis表能不能關聯檢視資料庫MyBatis
- 檢視oracle資料庫----sizeOracle資料庫
- SCN, Checkpoint 與 oracle資料庫恢復的關係(final)Oracle資料庫
- 針對XML資料的關係型檢視XYXML
- 檢視資料庫表空間資料庫
- ORACLE之檢視資料庫的SQLOracle資料庫SQL
- 例項,資料庫,資料字典與資料庫建立的關係資料庫
- SCN與資料庫恢復的關係資料庫
- SQL與NoSQL(關係型與非關係型)資料庫的區別SQL資料庫
- Oracle - 資料庫的例項、表空間、使用者、表之間關係Oracle資料庫
- 資料庫的查詢與檢視資料庫
- Oracle相關資料字典檢視Oracle
- 關係型資料庫與NoSQL資料庫的優勢與劣勢資料庫SQL
- 【轉】檢視Oracle資料庫阻塞Oracle資料庫
- 檢視Oracle資料庫表空間大小,是否需要增加表空間的資料檔案Oracle資料庫
- MySQL資料庫之mysql5.7基礎 檢視一個資料庫中的所有表MySql資料庫
- oracle 叢集,資料庫,asm三者關係認證表Oracle資料庫ASM
- 查詢基表的相關檢視
- MapReduce 與 關係型資料庫的區別資料庫
- oracle中的資料庫、使用者、方案、表空間、表物件之間的關係Oracle資料庫物件
- 關係型資料庫和非關係型資料庫的區別資料庫
- MYSQL-檢視資料庫或表的大小MySql資料庫
- 檢視oracle資料庫表空間使用情況 非常慢!Oracle資料庫
- Oracle 常用資料字典表、檢視的總結Oracle
- Oracle 常用資料字典檢視、表的總結Oracle
- oracle 學習總結篇三:SCN號與資料庫關閉的關係Oracle資料庫
- 資料庫的FLASHBACK 與ARCHIVELOG模式的關係資料庫Hive模式
- navicat資料庫全域性關係視覺化資料庫視覺化