視圖是從一個或幾個基本表(或視圖)中導出的虛拟的表。在系統的資料字典中僅存放了視圖的定義,不存放視圖對應的資料。視圖與表(有時為與視圖差別,也稱表為基本表——Base Table)不同,視圖所對應的資料不進行實際存儲,資料庫中隻存儲視圖的定義,在對視圖的資料進行操作時,系統根據視圖的定義去操作與視圖相關聯的基本表。在 SQL 中,視圖是基于 SQL 語句的結果集的可視化的表。
視圖包含行和列,就像一個真實的表。視圖中的字段就是來自一個或多個資料庫中的真實的表中的字段。我們可以向視圖添加 SQL 函數、WHERE 以及 JOIN 語句,我們也可以送出資料,就像這些來自于某個單一的表。
注釋:資料庫的設計和結構不會受到視圖中的函數、where 或 join 語句的影響。從使用者角度來看,一個視圖是從一個特定的角度來檢視資料庫中的資料。從資料庫系統内部來看,一個視圖是由SELECT語句組成的查詢定義的虛拟表。從資料庫系統内部來看,視圖是由一張或多張表中的資料組成的,從資料庫系統外部來看,視圖就如同一張表一樣。
視圖是原始資料庫資料的一種變換,是檢視表中資料的另外一種方式。可以将視圖看成是一個移動的視窗,通過它可以看到感興趣的資料。視圖是從一個或多個實際表中獲得的,這些表的資料存放在資料庫中。那些用于産生視圖的表叫做該視圖的基表。一個視圖也可以從另一個視圖中産生。視圖的定義存在資料庫中,與此定義相關的資料并沒有再存一份于資料庫中。通過視圖看到的資料存放在基表中。
視圖看上去非常像資料庫的實體表,對它的操作同任何其它的表一樣。當通過視圖修改資料時,實際上是在改變基表中的資料;相反地,基表資料的改變也會自動反映在由基表産生的視圖中。由于邏輯上的原因,有些視圖可以修改對應的基表,而有些則不能(僅僅能查詢)。
資料庫視圖主要具有三大特性,即簡單性、安全性和邏輯資料獨立性。
- 簡單性:看到的就是需要的。視圖不僅可以簡化使用者對資料的了解,也可以簡化他們的操作。那些被經常使用的查詢可以被定義為視圖,進而使得使用者不必為以後的操作每次指定全部的條件。
-
安全性:通過視圖使用者隻能查詢和修改他們所能見到的資料。資料庫中的其它資料則既看不見也取不到。資料庫授權指令可以使每個使用者對資料庫的檢索限制到特定的資料庫對象上,但不能授權到資料庫特定行和特定的列上。通過視圖,使用者可以被限制在資料的不同子集上。
使用權限可被限制在基表的行的子集上。
使用權限可被限制在基表的列的子集上。
使用權限可被限制在基表的行和列的子集上。
使用權限可被限制在多個基表的連接配接所限定的行上。
使用權限可被限制在基表中的資料的統計彙總上。
使用權限可被限制在另一視圖的一個子集上,或是一些視圖和基表合并後的子集上。
視圖的安全性可以防止未授權使用者檢視特定的行或列,使使用者隻能看到表中特定行的方法如下:
1 在表中增加一個标志使用者名的列;
2 建立視圖,使使用者隻能看到标有自己使用者名的行;
3 把視圖授權給其他使用者。
- 邏輯資料獨立性:視圖可幫助使用者屏蔽真實表結構變化帶來的影響。視圖可以使應用程式和資料庫表在一定程度上獨立。如果沒有視圖,應用一定是建立在表上的。有了視圖之後,程式可以建立在視圖之上,進而程式與資料庫表被視圖分割開來。
視圖可以在以下幾個方面使程式與資料獨立:
1 如果應用建立在資料庫表上,當資料庫表發生變化時,可以在表上建立視圖,通過視圖屏蔽表的變化,進而應用程式可以不動;
2 如果應用建立在資料庫表上,當應用發生變化時,可以在表上建立視圖,通過視圖屏蔽應用的變化,進而使資料庫表不動;
3 如果應用建立在視圖上,當資料庫表發生變化時,可以在表上修改視圖,通過視圖屏蔽表的變化,進而應用程式可以不動;
4 如果應用建立在視圖上,當應用發生變化時,可以在表上修改視圖,通過視圖屏蔽應用的變化,進而資料庫可以不動。
建立視圖的文法為CREATE VIEW <視圖名>[(列名組)]AS <子查詢>;删除視圖的文法為DROP VIEW <視圖名>。
資料來源:
SQL VIEW(視圖)| W3C School
https://www.w3school.com.cn/sql/sql_view.aspSQL - Using Views – Tutorialspoint
https://www.tutorialspoint.com/sql/sql-using-views.htmViews - SQL Server | Microsoft Docs
https://docs.microsoft.com/en-us/sql/relational-databases/views/views?view=sql-server-ver15