MySQL 基础 ———— 视图的应用与总结
引言
視圖是一種虛擬表,和普通表的使用是一樣的,視圖的一大特點(diǎn)就是“臨時(shí)性”,是通過(guò)表動(dòng)態(tài)生成的數(shù)據(jù),只保存SQL邏輯,不保存查詢結(jié)果。
視圖在實(shí)際生產(chǎn)中主要有兩種應(yīng)用場(chǎng)景:
1、多個(gè)地方用到同樣的查詢結(jié)果;
2、該查詢使用的SQL比較復(fù)雜。
下面,我們來(lái)總結(jié)一下這個(gè)在開發(fā)中經(jīng)常會(huì)用到的知識(shí)點(diǎn)。
一、視圖的優(yōu)勢(shì)
首先,視圖并不能提高SQL的性能,它的作用在于更好的組織數(shù)據(jù)。優(yōu)勢(shì)有以下幾點(diǎn):
1、重用SQL語(yǔ)句。
2、簡(jiǎn)化復(fù)雜的SQL操作,隱藏一部分SQL細(xì)節(jié)。
3、保護(hù)數(shù)據(jù),提高安全性。
二、視圖的創(chuàng)建
視圖的創(chuàng)建和表一樣,也用到了 CREATE 關(guān)鍵字。
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 查詢語(yǔ)句查詢語(yǔ)句可以是一個(gè)普通表,或者是其他視圖。
CREATE OR REPLACE VIEW limit_emp AS SELECT emp_id 員工編號(hào),emp_name 姓名,salary 工資,dept_id 部門編號(hào) FROMemp ;查看和使用視圖的方式和普通表完全一樣:
SELECT * FROM limit_emp;三、查看已創(chuàng)建的視圖
創(chuàng)建好視圖之后,如何查看已創(chuàng)建的視圖呢?如果使用Navicat 或 SQLyog,可以直接在左側(cè)的 “表文件夾”下方的“視圖文件夾”查看:
如果希望使用SQL來(lái)查看,因?yàn)镸ySQL認(rèn)為視圖也是一種表,所以可以使用如下語(yǔ)句:
SHOW TABLES;如果想僅查詢出視圖,那么可以執(zhí)行:
SHOW TABLE STATUS WHERE COMMENT = 'view';或者,直接查看指定名稱的視圖:
SHOW CREATE VIEW limit_emp;?
四、視圖的修改
視圖的修改可有兩種方式:
1、不確定是否已經(jīng)存在該視圖,可創(chuàng)建并替換,CREATE OR REPLACE VIEW:
CREATE OR REPLACE VIEW limit_emp AS SELECT * FROM emp2、確定已經(jīng)存在了該視圖,直接更新 ALTER??VIEW:
ALTER VIEW limit_emp AS SELECT * FROM emp五、更新視圖數(shù)據(jù)
視圖中的數(shù)據(jù)是允許修改的,如果對(duì)視圖執(zhí)行 INSERT 、UPDATE 、DELETE 不僅對(duì)視圖本身有效果,其背后的表也是會(huì)有影響的。但在實(shí)際生產(chǎn)中,往往會(huì)嚴(yán)格控制視圖的更新操作,且會(huì)將視圖設(shè)置為只讀模式,即只用視圖來(lái)簡(jiǎn)化查詢,避免通過(guò)視圖來(lái)對(duì)原表進(jìn)行修改。
雖然視圖可以更新,但是如果創(chuàng)建視圖的語(yǔ)句中包含了以下這些關(guān)鍵字,那么同樣無(wú)法執(zhí)行更新:
1、分組函數(shù)、DISTINCT、GROUP BY 子句、HAVING、UNION。
2、常量視圖
3、SELECT 語(yǔ)句中包含子查詢
4、JOIN 子句
5、FROM 一個(gè)不能更新的視圖
6、WHERE 子句的子查詢引用了 FROM 子句中的表
六、視圖的刪除
DROP VIEW 視圖名, 視圖名, ...;七、視圖和表的比較
| ? | 創(chuàng)建語(yǔ)法關(guān)鍵字 | 物理空間占用 | 使用 |
| 表 | CREATE TABLE | 占用 | 增刪改查 |
| 視圖 | CREATE VIEW | 不占用 | 一般只做查詢 |
?
創(chuàng)作挑戰(zhàn)賽新人創(chuàng)作獎(jiǎng)勵(lì)來(lái)咯,堅(jiān)持創(chuàng)作打卡瓜分現(xiàn)金大獎(jiǎng)總結(jié)
以上是生活随笔為你收集整理的MySQL 基础 ———— 视图的应用与总结的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: python oracle blob_
- 下一篇: 将单向链表按某值划分成左边小、 中间相等