Oracle 中的視圖理解

Oracle 中的視圖理解

1.視圖的概述

視圖其實就是一條查詢sql語句,用於顯示一個或多個表或其餘視圖中的相關數據。視圖將一個查詢的結果做爲一個表來使用,所以視圖能夠被看做是存儲的查詢或一個虛擬表。視圖來源於表,視圖自己就是一個查詢結果因此對視圖的修改我我的認爲沒有任何意義,並且視圖不能更新視圖建立時候有兩個選項分別是sql

(1)             選擇項WITH CHECK OPTION表示對視圖進行UPDATE INSERT DELETE操做時,要保證操做的數據知足視圖定義的謂詞條件,也就是視圖子查詢中的WHERE子句的條件數據庫

(2)             選項WITH READ ONLY 只讀視圖,不容許經過本視圖更新本表安全

視圖建立語句: Create [or  Replace] VIEW VIEW_NAME AS 子查詢【WITH CHECK OPTION】【WITH READ ONLY函數

視圖的刪除:DROP  VIEW  VIEW_NAME

2.視圖的存儲

與表不一樣,視圖不會要求分配存儲空間,視圖中也不會包含實際的數據。視圖只是定義了一個查詢,視圖中的數據是從基表中獲取,這些數據在視圖被引用時動態的生成。因爲視圖基於數據庫中的其餘對象,所以一個視圖只須要佔用數據字典中保存其定義的空間,而無需額外的存儲空間。 性能

3.視圖的做用

用戶能夠經過視圖以不一樣形式來顯示基表中的數據,視圖的強大之處在於它可以根據不一樣用戶的須要來對基表中的數據進行整理。也就是說根據不一樣的需求建立不一樣的視圖, spa

經過視圖能夠設定容許用戶訪問的列和數據行,從而爲表提供了額外的安全控制隱藏數據複雜性 視圖中可使用鏈接(join),用多個表中相關的列構成一個新的數據集。此視圖就對用戶隱藏了數據來源於多個表的事實。 code

31簡化用戶的SQL 語句

用戶使用視圖就可從多個表中查詢信息,而無需瞭解這些表是如何鏈接的。以不一樣的角度來顯示基表中的數據 視圖的列名能夠被任意改變,而不會影響此視圖的基表 使應用程序不會受基表定義改變的影響 ,實際上就是SQL語句操做的結果做爲視圖的基表來使用。orm

3.2保存複雜查詢

一個查詢可能會對錶數據進行復雜的計算。用戶將這個查詢保存爲視圖以後,每次進行相似計算只需查詢此視圖便可。 邏輯數據獨立性 視圖可使應用程序和數據庫表在必定程度上獨立。若是沒有視圖,應用必定是創建在表上的。有了視圖以後,程序能夠創建在視圖之上,從而程序與數據庫表被視圖分割開來。原始數據安全 對象

4.視圖的工做機制

視圖的定義就是其使用的查詢語句,Oracle將這個定義以文本形式存儲在數據字典中。當用戶在 SQL 語句中引用了視圖時,Oracle 將進行如下工做: 將引用了視圖的語句與視圖的定義語句整合爲一個語句 在共享SQL 區解析整合後的語句 執行此語句 當現有的共享SQL 區中沒有與整合後的語句一致時,Oracle 纔會爲此語句建立新的共享SQL 區。所以,引用了視圖的SQL 語句也可以利用已有的共享 SQL 區以達到節約內存和提升性能的目的。 內存

5.視圖的依賴性

 

因爲視圖的定義是一個引用了其餘對象(表,視圖)的查詢,所以視圖依賴於其所引用的對象。Oracle 會自動地處理視圖的依賴性。例如,當用戶移除了一個視圖的基表後再重建此表,Oracle 將檢查新的基表是否符合視圖的定義並判斷視圖的有效性。

6.可更新的鏈接視圖

鏈接視圖是指在一個視圖的定義查詢的from字句中引用了多個表或視圖。而可更新的鏈接視圖是指可以執行 UPDATEINSERT,和 DELETE 操做的鏈接視圖。爲了保證視圖是可更新的,其定義中不能包含如下語法結構:

集合操做符

DISTINCT 操做符

聚合函數或分析型函數

GROUP BYORDER BYCONNECT BY,或 START WITH 字句

SELECT 以後的列表中使用集合表達式

SELECT 以後的列表中使用子查詢

鏈接(join)(可是有例外狀況

對於不可更新的視圖,能夠利用 INSTEAD OF 觸發器對其數據進行修改。

相關文章
相關標籤/搜索