程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> MYSQL數據庫 >> MySQL綜合教程 >> mysql---視圖

mysql---視圖

編輯:MySQL綜合教程

視圖是一張虛擬的表,並沒有實際存儲數據,存儲的是一種“函數關系”。

語法:

create view 視圖名 as select語句;

為什麼說視圖存儲的是一種函數關系?

當引用視圖時,它會根據這種關系到創建視圖的各個表中去尋找相關字段,並按照這種關系進行運算得到結果。所以視圖不需要存儲數據,只需要存儲這種“函數關系”。

如表1是記錄長方形長的表

長(cm) 10

如表2是記錄長方形寬的表

寬(cm) 20

現在創建一個視圖用來求長方形面積

面積 長*寬 當需要引用視圖的時候,視圖會按照函數關系“面積=長*寬”到表1和表2中取數據運算得到所需結果。實際上視圖並沒有存儲每個長方形的面積。以上表設計不嚴謹只是為了說明問題。

表改變會改變視圖嗎?

因為是函數關系f(x,y),當x或者y有一個變化時,f(x,y)的值一定會變化。x和y相當於創建視圖的表,f(x,y)相當於視圖。

創建一張學生成績表

\

各個字段分別代表“學生ID”,“數學成績”,“語文成績”,“英語成績”。

\

現在創建一個求各個學生平均成績的視圖

\

對表做一下改動,看看視圖會不會跟著一起變化

\

再看看視圖的內容

\

視圖的確變化了,所以表的變化一定會影響視圖。

視圖改變會改變表嗎?

這不一定,如果視圖和表是以一個對應的,即f(x,y)可以反得到x,y(類似反函數關系)。這種情況下,視圖改變會影響原有表。

對於求平均成績的視圖,無法由平均成績得到各科的成績,所以他們不是一一對應關系,這種情況Mysql不允許改變視圖

\

視圖有三種實現方式

merge:引用視圖時,將引用時的條件與創建視圖時的條件合並。構成新的查詢語句去各個表中查詢。

以之前的平均分視圖為例,紅色劃線為創建視圖的查詢語句

\

現在要求平均分前三高的學生,可以直接引用視圖來查詢

\

如果algorithm設置為merge

實際的操作是將這兩次的查詢條件合並相當於

\

temptable:引用視圖時,先按照創建視圖的條件查詢各個表,將結果生成臨時表,再對臨時表進行查詢。

undefined:數據庫默認undefined由數據庫根據情況決定用merge還是temptable。

視圖的作用

(1)方便操作:如果要經常用到某個臨時表時,比如上面的平均分視圖。如果沒有定義視圖,每次都需要求平均分臨時表,再去對臨時表進行查詢。有視圖就很方便,直接查詢視圖就可以了。

(2)安全考慮:如果兩個公司合作,需要開放雙方的一些用戶信息,但是又不想公布一些涉及隱私或機密的信息(如用戶密碼),可以生成不包含密碼字段的視圖給對方。對方直接使用視圖即可滿足要求。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved