視角
1、視圖是從一個或多個表或視圖中導出的表,其結構和數據是建立在對表的查詢基礎上的。
(資料圖片僅供參考)
2、和表一樣,視圖也是包括幾個被定義的數據列和多個數據行,但就本質而言這些數據列和數據行來源于其所引用的表。
3、所以視圖不是真實存在的基礎表而是一張虛表,視圖所對應的數據并不實際地以視圖結構存儲在數據庫中,而是存儲在視圖所引用的表中。
4、視圖一經定義便存儲在數據庫中,與其相對應的數據并沒有像表那樣又在數據庫中再存儲一份,通過視圖看到的數據只是存放在基本表中的數據。
5、對視圖的操作與對表的操作一樣,可以對其進行查詢、修改(有一定的限制)、刪除。
6、當對通過視圖看到的數據進行修改時,相應的基本表的數據也要發生變化,同時,若基本表的數據發生變化,則這種變化也可以自動地反映到視圖中。
7、視圖有很多優點,主要表現在:?6?1視點集中?6?1簡化操作?6?1定制數據?6?1合并分割數據?6?1安全性如果你要創建一個視圖,為其指定一個名稱和一個查詢即可。
8、Microsoft SQL Server只保存視圖的元數據(metadata),用于描述這個對象,以及它所包含的列、安全、依賴等。
9、當你查詢視圖時,無論是獲取數據還是修改數據,查詢處理器(query processor)都會用視圖定義代替視圖引用。
10、也就是說,查詢處理器展開視圖定義并生成訪問基對象(underlying objects)的執行計劃。
11、視圖在數據庫中發揮著重要的作用。
12、視圖的重要用途之一便是被用作一個抽象裝置(abstraction mechanism)。
13、例如,在適當時利用視圖你可以很容易地為基礎數據提供或多或少的規范化映像(normalized picture),這樣就不用更改實際數據的規范化(normalization)。
14、通過應用模塊化的方法(逐步解決復雜問題),可以簡化解決方案。
15、可以利用視圖訪問經過篩選和處理的數據,而不是直接對基表(base table)進行操作(讓視圖的架構和基對象的架構相同),可以把視圖作為一個安全層(security layer)(在一定程度上)。
16、如果在視圖上創建索引,它在提高性能方面也發揮著重要作用。
17、在視圖上創建聚集索引(clustered index)會讓它的數據真正地保存在磁盤上,而不再是虛擬的數據。
18、我會在本章專門用一節介紹索引視圖。
19、現在,我們先來關注沒有索引的視圖,它們通常沒有特定的性能影響,包括消極的或積極的。
20、與其他的表表達式(如派生表、公用表表達式,或內聯表值用戶定義函數[inline table-valued user-defined function,UDF])一樣,視圖的查詢定義必須滿足3個條件:不能在查詢定義中使用ORDER BY,除非定義中包含TOP或FOR XML說明符。
21、所有的結果列必須有名稱。
22、所有結果列的名稱必須是唯一的。
23、定義視圖的查詢中在沒有TOP或FOR XML說明符的情況下不能包含ORDER BY子句,這是因為視圖被認為表示一個表。
24、表是一個邏輯實體,它的行沒有順序,不同于游標,游標是一個物理對象,它可以對行排序。
25、表中的所有列必須有名稱,且名稱必須是唯一的,這一點勿庸置疑。
26、為視圖的目標列指定名稱有兩種方法,可以在視圖名稱后面的圓括號內指定,也可以用每個表達式后面的別名作為列名稱。
27、來看一個示例,運行下面的代碼創建VcustsWithOrders視圖。
28、SET NOCOUNT ON;USE Northwind;GOIF OBJECT_ID(‘dbo.VcustsWithOrders’) IS NOT NULLDROP VIEW dbo.VcustsWithOrders;GOCREATE VIEW dbo.VcustsWithOrdersASSELECT CustomerID, CompanyName, ContactName, ContactTitle,Address, City, Region, PostalCode, Country, Phone, FaxFROM Customers AS CWHERE EXISTS(SELECT * FROM dbo.Orders AS OWHERE O.CustomerID = C.CustomerID);GO滿意請采納。
本文到此分享完畢,希望對大家有所幫助。