對資料庫檢視view的理解
首先解釋什麼是檢視:
檢視其實就是一條查詢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操作
在SQL中修改檢視中的資料會受到哪些限制?
------------------------------------
1、必須有許可權
2、對由多表連線成的檢視修改資料時,不能同時影響一個以上的基表,也不能刪除檢視中的資料
3、對檢視上的某些列不能修改,這些列是:計算列,內建函式列和行集合函式列
4、對具有NOT NULL 的列進行修改時可能會出錯。通過檢視修改或者插入資料時,必須保證未顯示的具有NOT NULL 屬性的列有值,可以是預設值,IDENTITY 等,否則不能像檢視中插入資料行。
5、如果某些列因為規則或者約束的限制不能接受從檢視插入的資料時,則插入資料可能會失敗
6、刪除基表並不刪除檢視,建議採用與表明顯不同的名字命名規則
檢視的有點:
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列值為他們自己的使用者名稱
Oracle檢視非常強大的功能之一在於其可以創 建一個帶有錯誤的檢視。比如說檢視裡的欄位在基表裡不存在,該檢視仍然可以建立成功,但是非法的且無法執行。當基表裡加入了該欄位,或者說某個欄位修改成 檢視裡的該欄位名稱,那麼檢視馬上就可以成為合法的。3.Oracle檢視非常強大的功能之一在於其可以創 建一個帶有錯誤的檢視。
比如說檢視裡的欄位在基表裡不存在,該檢視仍然可以建立成功,但是非法的且無法執行。當基表裡加入了該欄位,或者說某個欄位修改成 檢視裡的該欄位名稱,那麼檢視馬上就可以成為合法的。
檢視的缺點:
4.儲存複雜查詢
一個查詢可能會對錶資料進行復雜的計算。使用者將這個查詢儲存為檢視之後,每次進行類似計算只需查詢此檢視即可。
邏輯資料獨立性
檢視可以使應用程式和資料庫表在一定程度上獨立。如果沒有檢視,應用一定是建立在表上的。有了檢視之後,程式可以建立在檢視之上,從而程式與資料庫表被檢視分割開來。
5.檢視的依賴性
由於檢視的定義是一個引用了其他物件(表,檢視)的查詢,因此檢視依賴於其所引用的物件。Oracle 會自動地處理檢視的依賴性。例如,當使用者移除了一個檢視的基表後再重建此表,Oracle 將檢查新的基表是否符合檢視的定義並判斷檢視的有效性。
相關文章
- 資料庫——對索引的理解資料庫索引
- 資料庫檢視資料庫
- 資料庫-檢視資料庫
- 檢視資料庫的版本資料庫
- 資料庫的物化檢視資料庫
- 資料庫檢視的作用資料庫
- 資料庫檢視的使用資料庫
- Oracle資料庫scott使用者建立view檢視許可權Oracle資料庫View
- 檢視MySQL資料庫的命令MySql資料庫
- 檢視資料庫中的物件資料庫物件
- MySQL資料庫檢視:檢視定義、建立檢視、修改檢視MySql資料庫
- 【VIEW】Oracle資料字典檢視之DICT_COLUMNSViewOracle
- 資料庫無法建立資料庫檢視資料庫
- 常用的檢視資料庫的SQL資料庫SQL
- 資料庫檢視詳解資料庫
- 檢視oracle資料庫----sizeOracle資料庫
- 檢視MySql資料庫鎖,並殺死對應程式MySql資料庫
- 檢視映象資料庫的狀態資料庫
- 資料庫的查詢與檢視資料庫
- ORACLE之檢視資料庫的SQLOracle資料庫SQL
- MySQL View 檢視MySqlView
- 2.8.3 資料庫服務的資料字典檢視資料庫
- 檢視資料庫資料檔案的總大小資料庫
- MySQL檢視當前資料庫庫MySql資料庫
- 2.12 資料庫資料字典檢視資料庫
- 使用DUMP資料塊與BBED檢視BLOCK對比資料庫修改時的SCNBloC資料庫
- 什麼是資料庫檢視?資料庫
- 檢視資料庫表空間資料庫
- 資料庫檢視詳解 (轉)資料庫
- 檢視資料庫中各表資訊資料庫
- 【轉】檢視Oracle資料庫阻塞Oracle資料庫
- openGausspostgreSQL資料庫效能檢視SQL資料庫
- 資料庫各個檢視的內容資料庫
- 檢視資料庫大小的通用命令:資料庫
- Laravel View Composer 解決檢視公共部分的資料傳遞LaravelView
- materialized view (物化檢視)ZedView
- 對 oracle 資料庫日期格式,以及對日期操作的理解Oracle資料庫
- 檢視oracle資料庫的連線數以及使用者檢視Oracle資料庫