爲什麼要有視圖?
先看我們先到遇到的情況。
視圖是從一個或多個表(或視圖)查詢出的數據形成的虛擬表。如果我們有一個複雜的查詢,就可以把這個查詢做成視圖。視圖保存的是SQL
語句,不保存查詢結果。他裏面的數據來源是什麼?
舉例:
- 臨時性:相當於臨時組成的工作小組。
- 重複利用
視圖與我們之前學的表不同,視圖是一個虛表,即視圖所對應的數據不進行實際存儲,數據庫中只存儲視圖的定義,對視圖的數據進行操作時,系統根據視圖的定義去操作與視圖相關聯的基本表。
視圖一經定義,就可以像表一樣被查詢、修改、刪除和更新。
應用場景:
- 多個地方用到同樣的查詢結果。
- 該查詢語句比較複雜,如果每個人都自己寫查詢語句,不統一。、
視圖的創建
語法:
CREATE [OR REPLACE] VIEW 視圖名稱[(column [ ,...n ] )]
AS 查詢語句
[WITH CHECK OPTION]
例:
建立視圖,視圖內容爲學生的姓名。
CREATE VIEW s1 AS
SELECT
StuName
FROM
student;
視圖的優點
SQL
語句的重用- 爲用戶集中數據,簡化用戶的數據查詢和處理。有時用戶所需要的數據分散在多個表中,定義視圖可將它們集中在一起,從而方便用戶的數據查詢和處理。
- 屏蔽數據庫的複雜性。用戶不必瞭解複雜的數據庫中的表結構,並且數據庫表的更改也不影響用戶對數據庫的使用。
- 簡化用戶權限的管理。只需授予用戶使用視圖的權限,而不必指定用戶只能使用表的特定列,也增加了安全性。
視圖的操作
視圖的修改
語法1:
CREATE OR REPLACE VIEW 視圖名
AS
查詢語句;
例:
把視圖s1的內容修改爲學生姓名與電話號碼。
CREATE OR REPLACE VIEW s1 AS
SELECT
StuName,Telephone
FROM
student;
語法2:
ALTER VIEW 視圖名
AS
查詢語句;
例:
把視圖s1的內容修改爲學生姓名,性別與電話號碼。
ALTER VIEW s1 AS
SELECT
StuName,Telephone,StuSex
FROM
student;
刪除視圖
語法:
drop view 視圖名,視圖名,視圖名...;
例:
DROP VIEW s1;
查看視圖
語法1:
desc 視圖名;
例:
查看視圖s1的結構
DESC s1;
語法2:
show create view 視圖名;
例:
查看視圖s1的結構
show create view s1;
不可更新視圖
視圖也是可以進行增刪改查的,更改的同時,也會修改原數據表,增刪改查的方式和數據表一樣(因爲它也是一張表),但是有以下幾種情況,是不允許進行增刪改查的~
在創建視圖時,如果對應的查詢語句包含下述結構中的任何一種,那麼它就是不可更新的:
聚合函數;
2.DISTINCT
關鍵字;GROUP BY
子句;ORDER BY
子句;HAVING
子句;UNION
運算符;- 位於選擇列表中的子查詢;
FROM
子句中包含多個表;SELECT
語句中引用了不可更新視圖;WHERE
子句中的子查詢,引用FROM
子句中的表;
11.ALGORITHM
選項指定爲TEMPTABLE
(使用臨時表總會使視圖成爲不可更新的)。
保證數據操作的一致性
當對包含where
子句的視圖執行修改或插入操作時,即使新數據不滿足 where
條件,操作也能成功。使用 with check option
選項,限制通過視圖對基表中數據的操作。
參考筆記來自老師授課的教案:番茄發燒了
編程我也是初學者,難免有理解錯誤的地方,希望大家看完之後,發現錯誤可以評論出來,謝謝大家