什么是視圖
- 視圖是一個虛擬表,其內容由查詢定義,
- 同真實的表一樣,視圖包含一系列帶有名稱的列和行資料,
- 行和列資料來自定義視圖的查詢所參考的表,并且在參考視圖時動態生成,
- 簡單的來說視圖是由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 陳述句中參考了不可更新視圖;
- 只要視圖當中的資料不是來自于基表,就不能夠直接修改
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/48508.html
標籤:MySQL
上一篇:mysql的索引
下一篇:mysql的存盤程序
