1. 視圖的理解
sql
視圖其實就是一條查詢SQL語句,用於顯示一個(或多個)表或其它視圖中的相關數據。視圖將一個查詢的結果做爲一個表來使用。所以視圖能夠被看作是存儲在系統中的一張虛擬表。視圖源於表,全部對視圖數據的修改最終都會被反映到視圖的基表中。
數據庫
2. 視圖的存儲安全
與表不同,視圖不要求分配存儲空間,視圖中也不會包含實際的數據。視圖只是定義了一個查詢,視圖中的數據都是從基表獲取,這些數據在視圖被引用時動態的生成。性能
3. 視圖的做用
code
用戶能夠經過視圖以不一樣的形式來顯示基表中的數據,視圖的強大之處在於它可以根據不一樣用戶的須要來對基表中的數據進行整理。視圖常見的用途以下:對象
3.1 經過視圖能夠設定容許用戶訪問某些列或某些行數據
內存
爲表提供了額外的安全控制class
3.2 隱藏數據的複雜性select
視圖中一般會使用一些很複雜的SQL語句,如join等,用多個表中相關的列構成一個新的數據集,這個視圖就隱藏了數據來源於多個表的現象引用
3.3 簡化用戶的SQL語句
用戶使用視圖就能夠從中獲取到多個表的信息,不須要關心這些表是如何鏈接的。
3.4 視圖的列名能夠被任意改變,而不會影響視圖的基表
這可使應用程序不受基表定義/改變的影響。例如:在一個視圖的定義中查詢了一個包含4列的基表中的3列數據,當基表中添加了新的列後,因爲視圖的定義並無被影響,所以使用此視圖的應用程序也不會被影響。
3.5 保存複雜查詢
一個查詢可能會對多張表進行復雜的計算,用戶將這個查詢保存爲視圖以後,之後每次進行相似計算只須要查詢這個視圖便可。
3.6 邏輯數據獨立性
視圖可使應用程序和數據庫表在必定程度上獨立。若是沒有視圖,應用是創建在表上的,有了視圖以後,程序能夠創建在視圖之上,從而程序與數據庫表分割開來。
4. 視圖的工做機制
視圖的定義就是查詢語句,Oracle將這個定義以文本形式存儲在數據字典中。當用戶在SQL語句中引用該視圖時,Oracle將進行如下工做:
1>將引用了視圖的語句與視圖的定義語句整合成一個語句
2>在共享SQL區解析整合後的語句
3>執行整合後的語句
4>當現有的共享SQL區中沒有與整合後的語句一致時,Oralce會爲此語句建立新的共享SQL區。所以,引用了視圖的SQL語句也可以利用已有的共享SQL區以達到節約內存和提升性能的目的。
5. 視圖的依賴性
因爲視圖的定義是一個引用了其它對象(表,視圖)的查詢,所以視圖依賴於其所引用的對象。
6. 視圖的建立
create or replace view demo_view(name,age) as select tu.user_name,tu.age from t_user tu;
備註:括號裏面的name,age是select獲得的結果的別名
7. 視圖的調用及結果