撩課-Mysql第18部分檢視
阿新 • • 發佈:2018-12-19
學習地址:
撩課-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 語句中引用了不可更新檢視; 只要檢視當中的資料不是來自於基表, 就不能夠直接修改