什麼是視圖 1. 視圖是一個虛擬表,其內容由查詢定義。 2. 同真實的表一樣,視圖包含一系列帶有名稱的列和行數據。 3. 行和列數據來自定義視圖的查詢所引用的表,並且在引用視圖時動態生成。 4. 簡單的來說視圖是由select結果組成的表; 視圖的特性 1. 視圖是對若幹張基本表的引用,一張虛表,查 ...
什麼是視圖
- 視圖是一個虛擬表,其內容由查詢定義。
- 同真實的表一樣,視圖包含一系列帶有名稱的列和行數據。
- 行和列數據來自定義視圖的查詢所引用的表,並且在引用視圖時動態生成。
- 簡單的來說視圖是由select結果組成的表;
視圖的特性
- 視圖是對若幹張基本表的引用,一張虛表,查詢語句執行的結果,
- 不存儲具體的數據(基本表數據發生了改變,視圖也會跟著改變);
- 可以跟基本表一樣,進行增刪改查操作(增刪改操作有條件限制);
視圖的作用
-
安全性
創建一個視圖,定義好該視圖所操作的數據。之後將用戶許可權與視圖綁定 這樣的方式是使用到了一個特性:grant語句可以針對視圖進行授予許可權。 -
查詢性能提高。
-
提高了數據的獨立性
創建視圖
CREATE [ALGORITHM]={UNDEFINED|MERGE|TEMPTABLE}]
VIEW 視圖名 [(屬性清單)]
AS SELECT 語句
[WITH [CASCADED|LOCAL] CHECK OPTION];
ALGORITHM參數:
- merge:處理方式替換式,可以進行更新真實表中的數據;
- TEMPTABLE:具化式,由於數據存儲在臨時表中,所以不可以進行更新操作!
- UNDEFINED:沒有定義ALGORITHM參數 mysql更傾向於選擇替換方式。是因為它更加有效。
WITH CHECK OPTION:更新數據時不能插入或更新不符合視圖限制條件的記錄。
LOCAL和CASCADED:為可選參數,決定了檢查測試的範圍,預設值為CASCADED。
修改視圖
CREATE OR REPLACE VIEW 視圖名 AS SELECT [...] FROM [...];
刪除視圖
drop view 視圖名稱;
視圖機制
- 替換式 操作視圖時,視圖名直接被視圖定義給替換掉
- 具化式 mysql先得到了視圖執行的結果,該結果形成一個中間結果暫時存在記憶體中。 外面的select語句就調用了這些中間結果(臨時表)
- 替換式與具化式區別 替換方式,將視圖公式替換後,當成一個整體sql進行處理了。 具體化方式,先處理視圖結果,後處理外面的查詢需求。
視圖不可更新部分
- 聚合函數;
- DISTINCT 關鍵字;
- GROUP BY子句;
- HAVING 子句;
- UNION 運算符;
- FROM 子句中包含多個表;
- SELECT 語句中引用了不可更新視圖;
- 只要視圖當中的數據不是來自於基表,就不能夠直接修改