MySQL 基礎 ———— 視圖的應用與總結

引言

視圖是一種虛擬表,和普通表的使用是一樣的,視圖的一大特點就是“臨時性”,是通過表動態生成的數據,只保存SQL邏輯,不保存查詢結果。

視圖在實際生產中主要有兩種應用場景:

1、多個地方用到同樣的查詢結果;

2、該查詢使用的SQL比較複雜。

下面,我們來總結一下這個在開發中經常會用到的知識點。

一、視圖的優勢

首先,視圖並不能提高SQL的性能,它的作用在於更好的組織數據。優勢有以下幾點:

1、重用SQL語句。

2、簡化複雜的SQL操作,隱藏一部分SQL細節。

3、保護數據,提高安全性。

二、視圖的創建

視圖的創建和表一樣,也用到了 CREATE 關鍵字。

CREATE
    [OR REPLACE]
    [ALGORITHM = {UNDEFINED | MERGE | TEMPTABLE}]
    [DEFINER = user]
    [SQL SECURITY { DEFINER | INVOKER }]
    VIEW view_name [(column_list)]
    AS select_statement
    [WITH [CASCADED | LOCAL] CHECK OPTION]

忽略可選部分,則:

CREATE 視圖名 AS 查詢語句

查詢語句可以是一個普通表,或者是其他視圖。

CREATE OR REPLACE VIEW limit_emp AS 
SELECT 
  emp_id 員工編號,
  emp_name 姓名,
  salary 工資,
  dept_id 部門編號 
FROM
  emp ;

查看和使用視圖的方式和普通表完全一樣:

SELECT * FROM limit_emp;

三、查看已創建的視圖

創建好視圖之後,如何查看已創建的視圖呢?如果使用Navicat 或 SQLyog,可以直接在左側的 “表文件夾”下方的“視圖文件夾”查看:

如果希望使用SQL來查看,因爲MySQL認爲視圖也是一種表,所以可以使用如下語句:

SHOW TABLES;

如果想僅查詢出視圖,那麼可以執行:

SHOW TABLE STATUS WHERE COMMENT = 'view';

或者,直接查看指定名稱的視圖:

SHOW CREATE VIEW limit_emp;

 

四、視圖的修改

視圖的修改可有兩種方式:

1、不確定是否已經存在該視圖,可創建並替換,CREATE OR REPLACE VIEW:

CREATE OR REPLACE VIEW limit_emp
AS
SELECT * FROM emp

2、確定已經存在了該視圖,直接更新 ALTER  VIEW:

ALTER VIEW limit_emp
AS
SELECT * FROM emp

五、更新視圖數據

視圖中的數據是允許修改的,如果對視圖執行 INSERT 、UPDATE 、DELETE 不僅對視圖本身有效果,其背後的表也是會有影響的。但在實際生產中,往往會嚴格控制視圖的更新操作,且會將視圖設置爲只讀模式,即只用視圖來簡化查詢,避免通過視圖來對原表進行修改。

雖然視圖可以更新,但是如果創建視圖的語句中包含了以下這些關鍵字,那麼同樣無法執行更新:

1、分組函數、DISTINCT、GROUP BY 子句、HAVING、UNION。

2、常量視圖

3、SELECT 語句中包含子查詢

4、JOIN 子句

5、FROM 一個不能更新的視圖

6、WHERE 子句的子查詢引用了 FROM 子句中的表

六、視圖的刪除

DROP VIEW 視圖名, 視圖名, ...;

七、視圖和表的比較

  創建語法關鍵字 物理空間佔用 使用
CREATE TABLE 佔用 增刪改查
視圖 CREATE VIEW 不佔用 一般只做查詢

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章