1. 視圖概述
視圖(View)是一種虛擬存在的表坑雅。視圖并不在數(shù)據(jù)庫(kù)中實(shí)際存在,行和列數(shù)據(jù)來(lái)自定義視圖的查詢中使用的表丁频,并且是在使用視圖時(shí)動(dòng)態(tài)生成的。通俗的講邑贴,視圖就是一條SELECT語(yǔ)句執(zhí)行后返回的結(jié)果集席里。所以我們?cè)趧?chuàng)建視圖的時(shí)候,主要的工作就落在創(chuàng)建這條SQL查詢語(yǔ)句上拢驾。
==視圖相對(duì)于普通的表的優(yōu)勢(shì)==:
- 簡(jiǎn)單:使用視圖的用戶完全不需要關(guān)心后面對(duì)應(yīng)的表的結(jié)構(gòu)奖磁、關(guān)聯(lián)條件和篩選條件,對(duì)用戶來(lái)說已經(jīng)是過濾好的復(fù)合條件的結(jié)果集繁疤。
- 安全:使用視圖的用戶只能訪問他們被允許查詢的結(jié)果集咖为,對(duì)表的權(quán)限管理并不能限制到某個(gè)行某個(gè)列秕狰,但是通過視圖就可以簡(jiǎn)單的實(shí)現(xiàn)。
- 數(shù)據(jù)獨(dú)立:一旦視圖的結(jié)構(gòu)確定了躁染,可以屏蔽表結(jié)構(gòu)變化對(duì)用戶的影響鸣哀,源表增加列對(duì)視圖沒有影響;源表修改列名吞彤,則可以通過修改視圖來(lái)解決我衬,不會(huì)造成對(duì)訪問者的影響。
2. 創(chuàng)建或者修改視圖
1.創(chuàng)建視圖語(yǔ)法:
CREATE [OR REPLACE] [ALGORITHM = {UNDEFINED | MERGE | TEMPTABLE}]
VIEW view_name [(column_list)]
AS select_statement
[WITH [CASCADED | LOCAL] CHECK OPTION]
2.修改視圖語(yǔ)法:
ALTER [ALGORITHM = {UNDEFINED | MERGE | TEMPTABLE}]
VIEW view_name [(column_list)]
AS select_statement
[WITH [CASCADED | LOCAL] CHECK OPTION]
選項(xiàng) :
WITH [CASCADED | LOCAL] CHECK OPTION 決定了是否允許更新數(shù)據(jù)使記錄不再滿足視圖的條件备畦。
LOCAL : 只要滿足本視圖的條件就可以更新低飒。
CASCADED : 必須滿足所有針對(duì)該視圖的所有視圖的條件才可以更新。 默認(rèn)值.
3.示例
create or replace view city_country_view
as
select t.*,c.country_name from country c , city t where c.country_id = t.country_id;
查詢視圖
3. 查看視圖
從 MySQL 5.1 版本開始懂盐,使用 SHOW TABLES 命令的時(shí)候不僅顯示表的名字褥赊,同時(shí)也會(huì)顯示視圖的名字,而不存在單獨(dú)顯示視圖的 SHOW VIEWS 命令莉恼。
image.png
同樣拌喉,在使用 SHOW TABLE STATUS 命令的時(shí)候,不但可以顯示表的信息俐银,同時(shí)也可以顯示視圖的信息尿背。
image.png
如果需要查詢某個(gè)視圖的定義,可以使用 SHOW CREATE VIEW 命令進(jìn)行查看 :
image.png
4.刪除視圖
1.語(yǔ)法
DROP VIEW [IF EXISTS] view_name [, view_name] ...[RESTRICT | CASCADE]
2.示例
DROP VIEW city_country_view ;