複製鏈接
請複製以下鏈接發送給好友

視圖

(計算機數據庫術語)

鎖定
視圖是指計算機數據庫中的視圖,是一個虛擬表,其內容由查詢定義。同真實的表一樣,視圖包含一系列帶有名稱的列和行數據。但是,視圖並不在數據庫中以存儲的數據值集形式存在。行和列數據來自由定義視圖的查詢所引用的表,並且在引用視圖時動態生成。
中文名
視圖
外文名
view
含    義
存儲在數據庫中的查詢的SQL 語句
作    用
簡單、安全、邏輯數據獨立性
優    點
視點集中簡化操作定製數據安全性
安全性
用户只能看到標有自己用户名的行

視圖視圖含義

計算機視圖
計算機視圖(16張)
從用户角度來看,一個視圖是從一個特定的角度來查看數據庫中的數據。從數據庫系統內部來看,一個視圖是由SELECT語句組成的查詢定義的虛擬表。從數據庫系統內部來看,視圖是由一張或多張表中的數據組成的,從數據庫系統外部來看,視圖就如同一張表一樣。
視圖是一個虛擬表,其內容由查詢定義。同真實的表一樣,視圖的作用類似於篩選。定義視圖的篩選可以來自當前或其它數據庫的一個或多個表,或者其它視圖。分佈式查詢也可用於定義使用多個異類源數據的視圖。
視圖是存儲在數據庫中的查詢的SQL 語句,它主要出於兩種原因:安全原因, 視圖可以隱藏一些數據,如:社會保險基金表,可以用視圖只顯示姓名,地址,而不顯示社會保險號和工資數等,另一原因是可使複雜的查詢易於理解和使用。
視圖:查看圖形或文檔的方式。
計算機中的視圖
計算機中的視圖(20張)
視圖一經定義便存儲在數據庫中,與其相對應的數據並沒有像表那樣又在數據庫中再存儲一份,通過視圖看到的數據只是存放在基本表中的數據。對視圖的操作與對錶的操作一樣,可以對其進行查詢、修改(有一定的限制)、刪除。
當對通過視圖看到的數據進行修改時,相應的基本表的數據也要發生變化,同時,若基本表的數據發生變化,則這種變化也可以自動地反映到視圖中。

視圖種類區別

Oracle數據庫視圖的種類和區別 [1] 
關係視圖:Oracle視圖是作為數據庫對象存在的,因此,創建之後也可以通過工具或數據字典來查看視圖的相關信息。這是大家常用的視圖,如:create view 視圖。
內嵌視圖:在from語句中的可以把表改成一個子查詢,如:select a.id ,b.id from emp a,(select id from dept) b where a.id=b.id內嵌視圖不屬於任何用户,也不是對象,內嵌視圖是子查詢的一種,可以與數據表、視圖一樣作為查詢語句的數據源存在,但在形式上有較大的區別,內嵌視圖不必使用create view命令進行創建,因此,在數據字典中也無法獲得相應信息。內嵌視圖的特點在於無須創建真正的數據庫對象,而只是封裝查詢,因此會節約數據庫資源,同時不會增加維護成本。但是內嵌視圖不具有可複用性,因此當預期將在多處調用到同一查詢定義時,還是應該使用關係視圖。
對象視圖:對象類型在數據庫編程中有許多好處,但有時,應用程序已經開發完成。為了迎合對象類型而重建數據表是不現實的。對象視圖正是解決這一問題的優秀策略。
對象視圖創建之後,同樣可以在數據字典中獲得其相應信息。利用Oracle內置視圖user_views可以獲得對象視圖相關信息。Oracle中的對象數據實際仍然以關係數據的形式存儲。但是,對象的特性,例如繼承、封裝等,都為開發人員提供了更加靈活的處理形式。同樣,可以構造複雜的對象類型來封裝複雜的多表查詢。
物化視圖:常用於數據庫的容災,不是傳統意義上虛擬視圖,是實體化視圖,和表一樣可以存儲數據、查詢數據。主備數據庫數據同步通過物化視圖實現,主備數據庫通過data link連接,在主備數據庫物化視圖進行數據複製。當主數據庫垮掉時,備數據庫接管,實現容災。 [1] 

視圖視圖作用

視圖——設計視圖
視圖——設計視圖(48張)
* 簡單性。看到的就是需要的。視圖不僅可以簡化用户對數據的理解,也可以簡化他們的操作。那些被經常使用的查詢可以被定義為視圖,從而使得用户不必為以後的操作每次指定全部的條件。
* 安全性。通過視圖用户只能查詢和修改他們所能見到的數據。但不能授權到數據庫特定行和特定的列上。通過視圖,用户可以被限制在數據的不同子集上:
使用權限可被限制在另一視圖的一個子集上,或是一些視圖和基表合併後的子集上。
* 邏輯數據獨立性。視圖可幫助用户屏蔽真實表結構變化帶來的影響。
軟道語錄
視圖:
視圖是由一個或者多個表組成的虛擬表。

視圖視圖優點

視圖有很多優點,主要表現在:
·視點集中
·簡化操作
·定製數據
·合併分割數據
·安全性
1. 視點集中
視圖集中即是使用户只關心它感興趣的某些特定數據和他們所負責的特定任務。這樣通過只允許用户看到視圖中所定義的數據而不是視圖引用表中的數據而提高了數據的安全性。
2. 簡化操作
視圖大大簡化了用户對數據的操作。因為在定義視圖時,若視圖本身就是一個複雜查詢的結果集,這樣在每一次執行相同的查詢時,不必重新寫這些複雜的查詢語句,只要一條簡單的查詢視圖語句即可。可見視圖向用户隱藏了表與表之間的複雜的連接操作。
3. 定製數據
視圖能夠實現讓不同的用户以不同的方式看到不同或相同的數據集。因此,當有許多不同水平的用户共用同一數據庫時,這顯得極為重要。
4. 合併分割數據
在有些情況下,由於表中數據量太大,故在表的設計時常將表進行水平分割或垂直分割,但表的結構的變化卻對應用程序產生不良的影響。如果使用視圖就可以重新保持原有的結構關係,從而使外模式保持不變,原有的應用程序仍可以通過視圖來重載數據。
5. 安全性
視圖可以作為一種安全機制。通過視圖用户只能查看和修改他們所能看到的數據。其它數據庫或表既不可見也不可以訪問。如果某一用户想要訪問視圖的結果集,必須授予其訪問權限。視圖所引用表的訪問權限與視圖權限的設置互不影響。
視圖的安全性
視圖的安全性可以防止未授權用户查看特定的行或列,使用户只能看到表中特定行的方法如下:
1 在表中增加一個標誌用户名的列;
2 建立視圖,是用户只能看到標有自己用户名的行;
3 把視圖授權給其他用户。
視圖可以使應用程序和數據庫表在一定程度上獨立。如果沒有視圖,應用一定是建立在表上的。有了視圖之後,程序可以建立在視圖之上,從而程序與數據庫表被視圖分割開來。視圖可以在以下幾個方面使程序與數據獨立:
1 如果應用建立在數據庫表上,當數據庫表發生變化時,可以在表上建立視圖,通過視圖屏蔽表的變化,從而應用程序可以不動。
2 如果應用建立在數據庫表上,當應用發生變化時,可以在表上建立視圖,通過視圖屏蔽應用的變化,從而使數據庫表不動。
3 如果應用建立在視圖上,當數據庫表發生變化時,可以在表上修改視圖,通過視圖屏蔽表的變化,從而應用程序可以不動。
4 如果應用建立在視圖上,當應用發生變化時,可以在表上修改視圖,通過視圖屏蔽應用的變化,從而數據庫可以不動。

視圖書寫格式

CREATE VIEW <視圖名>[(列名組)]AS <子查詢>
DROP VIEW <視圖名>
注意:視圖可以和基本表一樣被查詢,但是利用視圖進行數據增,刪,改操作,會受到一定的限制。
(1)由兩個以上的基本表導出的視圖(2)視圖的字段來自字段表達式函數(3)視圖定義中有嵌套查詢(4)在一個不允許更新的視圖上定義的視圖

視圖創建管理

(創建視圖時注意事項的介紹)
(一). 利用企業管理器創建與管理視圖
1.使用企業管理器創建視圖: 2.使用企業管理器的“嚮導”創建視圖:  3.使用企業管理器的修改視圖: 注意:在 “設計視圖”時完成的工作: 添加表/刪除表添加引用字段/刪除引用字段調整字段順序設置分組 設置過濾條件設置引用字段是否輸出設置視圖其他屬性4.使用企業管理器的刪除視圖:
(二). 用T-SQL語句創建與管理視圖
(查看由企業管理器創建的視圖—“項目信息”其相應的T-SQL語句)(“視圖屬性”) 1. 使用CREATE VIEW創建視圖的語法:參見教材p130~135 例子1:選擇‘員工表’和‘項目表’中的部分字段和記錄創建視圖,並且限制表‘員工表’ 中的記錄只能是部門為“項目部”的記錄集合,視圖定義為view_part,其程序清單如下:
CREATE VIEW view_partAS SELECT 員工表.編號,員工表.姓名,員工表.性別,員工表.所屬部門,項目表.項目編號,項目表.名稱FROM 項目表 INNER JOIN 員工表 ON 項目表.負責人 = 員工表.編號WHERE 員工表.所屬部門='項目部'
例子2:定義視圖時指定別名並加密
CREATE VIEW 項目信息視圖 ,項目名稱,項目客户,項目負責人,DATEDIFF,day,項目表.開始日期,項目表.結束日期,FROM 項目表, INNER JOIN 員工表 ,ON 項目表負責人 , 員工表.編號 INNER JOIN ,客户表 ,ON 項目表 ,客户 = 客户表.客户編號 WHERE , 員工表.所屬部門='項目部'
使用語句:execsp_helptext‘項目信息視圖’顯示消息為:“對象備註已加密。”

視圖應用舉例

例子5-3:使用WITH CHECK OPTION子句問題提出:若創建視圖ygb_view,其程序清單如下:
CREATE VIEW ygb_view AS SELECT * FROM 員工表 WHERE 員工表.性別=‘女’執行下列語句,插入新記錄:INSERT INTO ygb_view(姓名,性別,工資)values(‘李立三’,‘男’,2300)
插入操作成功,但不合理!解決辦法:使用with check option,程序清單如下:
CREATE VIEW ygb_view AS SELECT * FROM 員工表 WHERE 員工表.性別=‘女’With check option
同樣,插入新記錄:INSERT INTO ygb_view(姓名,性別,工資) values(‘李立三’,‘男’,2300)插入操作將失敗!
2.使用ALTER VIEW修改視圖 語法:參見教材3.刪除視圖DROP VIEW  使用DROP VIEW命令刪除視圖的語法如下:DROP VIEW 視圖名1 [,……]例: DROP VIEW ygb_view
使用視圖操作表數據
(一)、通過視圖添加表數據
使用INSERT語句實現。 注意:視圖是虛擬表,其本身不存儲數據(來自其引用表),添加的數據是存儲於視圖參照的數據表中。
條件分析:(1)用户有向數據表插入數據的權限;(2)視圖只引用表中部分字段,插入數據時只能是明確其應用的字段取值;(3)未引用的字段應具備下列條件之一: 允許空值;設有默認值;是標識字段;數據類型是timestamp或uniqueidentifer;(4)視圖不能包含多個字段的組合;(5)視圖不能包含使用統計函數的結果;(6)視圖不能包含DISTINCTGROUP BY子句;(7)定義視圖使用WITH CHECK OPTION,則插入數據應符合相應條件;(8)若視圖引用多個表,一條INSERT語句只能同一個基表中數據
例:首先創建了一個新的視圖:
CREATE VIEW ygb_view AS SELECT * FROM 員工表 WHERE 員工表.性別=‘女’ with check option
然後,通過執行以下語句使用該視圖向基表添加一條新的數據記錄:INSERT INTO ygb_view(姓名,性別,工資) values(‘李立平’,‘女’,2300)
(二)、更新數據記錄 使用視圖可以更新基表數據記錄(注意使用INSERT時的限制同樣適用)。例子3:(1) update 項目_view set 項目負責人= ‘王大力’ where 項目負責人= ‘王立兵’(2) update 項目_view set 結束日期= DATEADD(day,50,結束日期) where 客户名稱=‘CCH公司’
(三)、刪除數據記錄  利用DELETE語句,使用視圖刪除記錄,可以刪除任何基表中的記錄。 注意: 必須指定在視圖中定義過的字段來刪除記錄; 視圖引用多個表時,無法用DELETE命令刪除數據。例子4:delete ygb_view where 員工工資<1500
參考資料