1. 程式人生 > >撩課-Mysql第18部分檢視

撩課-Mysql第18部分檢視

學習地址:
撩課-JavaWeb系列1之基礎語法-前端基礎
撩課-JavaWeb系列2之XML
撩課-JavaWeb系列3之MySQL
撩課-JavaWeb系列4之JDBC
撩課-JavaWeb系列5之web伺服器-idea

什麼是檢視

檢視是一個虛擬表,
其內容由查詢定義。
同真實的表一樣,
檢視包含一系列帶有名稱的列和行資料。
行和列資料來自定義檢視的查詢所引用的表,
並且在引用檢視時動態生成。
簡單的來說檢視是由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 語句中引用了不可更新檢視;
只要檢視當中的資料不是來自於基表,
就不能夠直接修改