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 部門編號 FROMemp ;查看和使用視圖的方式和普通表完全一樣:
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 emp2、確定已經存在了該視圖,直接更新 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 | 不占用 | 一般只做查詢 |
?
創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎總結
以上是生活随笔為你收集整理的MySQL 基础 ———— 视图的应用与总结的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python oracle blob_
- 下一篇: linux cmake编译源码,linu