一. 什麼是視圖視圖是一種虛擬存在的表,行和列數據來自,定義視圖的查詢中使用的表,並且是在使用視圖時動態生成的。優勢有: 簡單: 使用視圖的用戶完全不需要關心後面對應的表的結構,關聯條件,篩選條件。 安全:使用視圖的用戶只能訪問他們被允許查詢的結果集。 數據獨立: 源表增加列對視圖沒有影響,源表修改 ...
一. 什麼是視圖
視圖是一種虛擬存在的表,行和列數據來自,定義視圖的查詢中使用的表,並且是在使用視圖時動態生成的。優勢有:
簡單: 使用視圖的用戶完全不需要關心後面對應的表的結構,關聯條件,篩選條件。
安全:使用視圖的用戶只能訪問他們被允許查詢的結果集。
數據獨立: 源表增加列對視圖沒有影響,源表修改列名,則通過修改視圖 對應好源表的列名來解決,不會造成對訪問者的影響。
1.1 創建視圖的操作
-- 創建視圖 CREATE OR REPLACE VIEW view_city AS SELECT * FROM city; -- 查詢視圖 SELECT * FROM view_city;
1.2 修改視圖
-- 修改視圖 ALTER VIEW view_city AS SELECT cityname FROM city;
1.3 限制
視圖一般只是用來做查詢使用,如果要對視圖做修改有如下限制不能更新:
包含關鍵字 聚合函數(sum,min,max,count等),distinct,group by , having,union ,union all。
常量視圖。
select 中包含子查詢。
jion。
from 一個不能更新的視圖。
where 字句的子查詢引用了from字句的表。
LOCAL 是只要滿足本視圖的條件就可以更新, CASCADED 則是必須滿足所有針對該視圖的所有視圖的條件才可以更新, 如果沒有明確是LOCAL 還是CASCADED,則預設是CASCADED,由於視圖基本不做修改,這裡就不在演示。
-- local與CASCADED 語法 CREATE OR REPLACE VIEW view_city AS SELECT * FROM city; -- with(local | CASCADED) CHECK OPTION;
1.4 刪除視圖
drop view view_city;
1.5 查看視圖
-- 查看視圖的定義 SHOW CREATE VIEW view_city
-- 查看視圖的定義 SELECT * FROM information_schema.views WHERE table_name = 'view_city'