【MySQL進階學習】視圖

爲什麼要有視圖?

先看我們先到遇到的情況。
視圖是從一個或多個表(或視圖)查詢出的數據形成的虛擬表。如果我們有一個複雜的查詢,就可以把這個查詢做成視圖。視圖保存的是SQL語句,不保存查詢結果。他裏面的數據來源是什麼?

舉例:

  • 臨時性:相當於臨時組成的工作小組。
  • 重複利用

視圖與我們之前學的表不同,視圖是一個虛表,即視圖所對應的數據不進行實際存儲,數據庫中只存儲視圖的定義,對視圖的數據進行操作時,系統根據視圖的定義去操作與視圖相關聯的基本表。
視圖一經定義,就可以像表一樣被查詢、修改、刪除和更新。

應用場景:

  1. 多個地方用到同樣的查詢結果。
  2. 該查詢語句比較複雜,如果每個人都自己寫查詢語句,不統一。、

視圖的創建

語法:

CREATE [OR REPLACE] VIEW 視圖名稱[(column [ ,...n ] )]
AS 查詢語句
[WITH CHECK OPTION]

例:
建立視圖,視圖內容爲學生的姓名。

CREATE VIEW s1 AS
SELECT 
	StuName 
FROM 
	student;

視圖的優點

  1. SQL語句的重用
  2. 爲用戶集中數據,簡化用戶的數據查詢和處理。有時用戶所需要的數據分散在多個表中,定義視圖可將它們集中在一起,從而方便用戶的數據查詢和處理。
  3. 屏蔽數據庫的複雜性。用戶不必瞭解複雜的數據庫中的表結構,並且數據庫表的更改也不影響用戶對數據庫的使用。
  4. 簡化用戶權限的管理。只需授予用戶使用視圖的權限,而不必指定用戶只能使用表的特定列,也增加了安全性。

視圖的操作


視圖的修改

語法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;

不可更新視圖

視圖也是可以進行增刪改查的,更改的同時,也會修改原數據表,增刪改查的方式和數據表一樣(因爲它也是一張表),但是有以下幾種情況,是不允許進行增刪改查的~

在創建視圖時,如果對應的查詢語句包含下述結構中的任何一種,那麼它就是不可更新的:

  1. 聚合函數;
    2.DISTINCT關鍵字;
  2. GROUP BY子句;
  3. ORDER BY 子句;
  4. HAVING子句;
  5. UNION運算符;
  6. 位於選擇列表中的子查詢;
  7. FROM子句中包含多個表;
  8. SELECT語句中引用了不可更新視圖;
  9. WHERE子句中的子查詢,引用 FROM子句中的表;
    11.ALGORITHM選項指定爲 TEMPTABLE(使用臨時表總會使視圖成爲不可更新的)。

保證數據操作的一致性

當對包含where子句的視圖執行修改或插入操作時,即使新數據不滿足 where 條件,操作也能成功。使用 with check option選項,限制通過視圖對基表中數據的操作。


參考筆記來自老師授課的教案:番茄發燒了

編程我也是初學者,難免有理解錯誤的地方,希望大家看完之後,發現錯誤可以評論出來,謝謝大家

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章