視圖的概述:
視圖(View)是一種虛擬存在的表。視圖并不在數(shù)據(jù)庫中實際存在,行和列數(shù)據(jù)來自定義視圖的查詢中使用的表,并且是在使用視圖時動態(tài)生成的恳不。通俗的講,視圖就是一條 SELECT語句執(zhí)行后返回的結(jié)果集开呐。所以我們在創(chuàng)建視圖的時候烟勋,主要的工作就落在創(chuàng)建這條SQL查詢語句规求。
視圖相對于普通的表的優(yōu)勢主要包括以下幾項。
- 簡單:使用視圖的用戶完全不需要關(guān)心后面對應(yīng)的表的結(jié)構(gòu)卵惦、關(guān)聯(lián)條件和篩選條件阻肿,對用戶來說已經(jīng)是過濾好的復(fù)合條件的結(jié)果集。
- 安全:使用視圖的用戶只能訪問他們被允許查詢的結(jié)果集沮尿,對表的權(quán)限管理并不能限制到某個行某個列丛塌,但是通過視圖就可以簡單的實現(xiàn)。
- 數(shù)據(jù)獨立:一旦視圖的結(jié)構(gòu)確定了畜疾,可以屏蔽表結(jié)構(gòu)變化對用戶的影響赴邻,源表增加列對視圖沒有影響:源表修改列名,則可以通過修改視圖來解決啡捶,不會造成對訪問者的影響姥敛。
視圖的語法
創(chuàng)建視圖
CREATE [OR REPLACE] [ALGORITHM = {UNDEFINED | MERGE | TEMPTABLE}]
VIEW view_name [(column_list)]
AS select_statement
[WITH [CASCADED | LOCAL] CHECK OPTION]
-
WITH [CASCADED | LOCAL] CHECK OPTION決定了是否允許更新數(shù)據(jù)使記錄不再滿足視圖的條件。
- LOCAL : 只要滿足本視圖的條件就可以更新瞎暑。
- CASCADED : 必須滿足所有針對該視圖的所有視圖的條件才可以更新彤敛。 CASCADED為默認(rèn)值。
創(chuàng)建視圖及查詢視圖:
image.png
對視圖進(jìn)行更新操作:
image.png
發(fā)現(xiàn)視圖更新了金顿,查詢一下原始表:
image.png
發(fā)現(xiàn)原始表也被改變了臊泌,由此可見對視圖的修改會影響基本表鲤桥,(視圖具體能不能更新還要看WITH [CASCADED | LOCAL] CHECK OPTION的設(shè)置)揍拆,雖然視圖可以被更新,但是不建議更新茶凳,因為視圖就是用來簡化查詢的嫂拴。
修改視圖語法:
ALTER [ALGORITHM = {UNDEFINED | MERGE | TEMPTABLE}]
VIEW view_name [(column_list)]
AS select_statement
[WITH [CASCADED | LOCAL] CHECK OPTION]
查看視圖:
從MySQL 5.1 版本開始,使用 SHOW TABLES 命令的時候不僅顯示表的名字贮喧,同時也會顯示視圖的名字:
image.png
使用SHOW CREATE VIEW + 視圖名 這個命令可以查詢到創(chuàng)建視圖時執(zhí)行的語句:
image.png
刪除視圖:
語法:
DROP VIEW [IF EXISTS] view_name [, view_name] ...[RESTRICT | CASCADE]
刪除視圖:
image.png