視圖
1、什么是視圖:
視圖是一種虛擬存在的表,對於使用視圖的用戶來說基本上是透明的。視圖並不在數據庫中實際存在,行和列數據來自定義視圖的查詢中使用的表,並且是在使用視圖時動態生產的。
2、視圖相對於普通的表的優勢主要包括以下幾項:
a、簡單:使用視圖的用戶完全不需要關系后面對於的表的結構、關聯條件和篩選條件,對用戶來說已經是過濾好的復合條件的結果集;
b、安全:使用視圖的用戶只能訪問他們被允許查詢的結果集,對表的權限管理並不能限制到某個行某個列,但是通過視圖就可以簡單地實現;
c、數據獨立:一旦視圖的結構確定了,可以屏蔽表結構變化對用戶對影響,源表增加列對視圖沒有影響;源表修改列名,則可以通過修改視圖來解決,不會造成對訪問者對影響。
3、操作:創建或修改視圖、刪除視圖,以及查看視圖定義。
3.1、創建視圖語法:
CREATE [OR REPLACE] [ ALGORITHM = {UNDEFINED | MERGE | TEMPTABLE }]
VIEW view_name [(column_list)] AS select_statement [WITH [ CASCADED | LOCAL] CHECK OPTION]
eg:創建視圖area_list_view,可以使用以下命令:
CREATE OR REPLACE VIEW `area_list_view` AS
SELECT d.id as did,d.`address`,d.area_id,a.id as aid,a.`name` FROM address d,area a WHERE d.area_id = a.id;
3.2、修改視圖語法:
ALTER [ALGORITHM = {UNDEFINED | MERGE | TEMPTABLE }]
VIEW view_name [( column_list )] AS select_statement [WITH [CASCADED | LOCAL] CHECK OPTION]
eg:修改視圖area_list_view,可以使用以下命令:
ALTER VIEW `area_list_view` AS
SELECT d.id ,d.`address`,d.area_id,a.`name` FROM address d,area a WHERE d.area_id = a.id;
WITH [CASCADED | LOCAL ] CHECK OPTION 決定了是否允許更新數據使記錄不再滿足視圖的條件(一般在多視圖的情況下才用到這個命令)。這個選項與Oracle數據庫中的選項是類似的,其中:
LOCAL 只要滿足本視圖的條件就可以更新;
CASCADED 則必須滿足所有真的該視圖的所有視圖的條件才可以更新。
如果沒有明確是 LOCAL 還是 CASCADED ,則默認是 CASCADED 。
3.3、刪除視圖語法:
DROP VIEW [ IF EXISTS ] view_name [, view_name ] ...[RESTRICT | CASCADE ]
eg:刪除area_list_view視圖: drop view area_list_view;
3.4、查看視圖:
1、查看視圖信息的操作:
SHOW TABLE STATUS [ FROM db_name ] [LIKE 'pattern']
eg:查看area_list_view視圖信息的操作:show table status like 'area_list_view'
2、查看視圖定義:
SHOW CREATE VIEW
eg:查看視圖area_list_view的定義:show create view area_list_view