MySQL<視圖>
視圖
視圖概述
視圖是指從一個或幾個基本表中導出的表,可以像操作基本表一樣操作視圖。視圖中只存放視圖定義而不存放視圖對應的數據。
如果基本表的數據發生變化,從視圖中查詢出的數據也會發生變化。因此可以把視圖認為是一個虛擬表。
優點
簡化查詢語句
日常開發中我們可以將經常使用的查詢定義為視圖,從而使用戶避免大量重復的操作。
安全性
通過視圖用戶只能查詢和修改他們所能見到的數據,數據庫中的其他數據則既看不到也取不到。
邏輯數據獨立性
視圖可以幫助用戶屏蔽真實表結構變化帶來的影響。
視圖管理
創建視圖的語法格式
create view<視圖名>[(<列名>...)] as 子查詢 [WITH CHECK OPTION]
子查詢可以出現任意select語句,但通常在查詢語句中不允許出現Order by和DISTINCT
在單表上創建視圖
在多表上創建視圖
查看視圖
使用DESCRIBE語句可以查看視圖的字段信息
DESCRIBE 視圖名;
或DESC 視圖名;
使用SHOW TABLE STATUS語句可以查看視圖的基本信息
SHOW TABLE STATUS LIKE ‘視圖名‘
使用SHOW CREATE VIEW語句不僅可以查看創建視圖時的定義語句,還可以查看視圖的字符編碼
SHOW CREATE VIEW 視圖名;
修改視圖
由於視圖是不實際存儲數據的虛擬表,因此更新視圖的操作,最終要轉化為對基本表的更新操作。為了防止對視圖進行數據更新時,對不屬於視圖範圍的基本表數據進行操作,可以在定義視圖時加上WITH CHECK OPTION子句。
我們發現表中數據發生了改變。由於視圖多是給用戶進行瀏覽的,並不需要其進行修改,所以這樣做很不安全。所以我們一般在SQL語句末尾加上WITH CHECK OPTION子句,這樣用戶就不能隨意進行修改了。
1、使用CREATE OR REPLACE VIEW語句修改視圖
CREATE [OR REPLACE ][ALGORITHM = {UNDEFINED | MERGE | TEMPTABLE}]
VIEW view_name [(column_list)]
AS SELECT_statement
[WITH[CASCADED | LOCAL] CHECK OPTION]
2、使用ALTER語句修改視圖
ALTER [ALGORITHM = {UNDEFINED | MERGE | TEMPTABLE}]
VIEW view_name [(column_list)]
AS SELECT_statement
[WITH[CASCADED | LOCAL] CHECK OPTION]
更新視圖
當視圖中包含有如下內容時,視圖的更新操作將不能被執行:
視圖中不包含基本表中被定義為非空的列。
在定義視圖的SELECT語句後的字段列表中使用了數學表達式。
在定義視圖的SELECT語句後的字段列表中使用聚合函數。
在定義視圖的SELECT語句中使用了DISTINCT,UNION,TOP,GROUP BY或HAVING子句。
使用UPDATE語句更新視圖
使用DELETE語句更新視圖
使用INSERT語句更新視圖
刪除視圖
只能刪除視圖的定義,不會刪除數據。
drop view <視圖名>
應用案例--視圖的應用
MySQL<視圖>