標籤:作用 使用者資訊 == 使用 csdn div 建立 sele 情況下
視圖是一張虛擬表,並沒有實際儲存資料,儲存的是一種“函數關係”。
文法:
create view 視圖名 as select語句。
為什麼說視圖儲存的是一種函數關係?
當引用視圖時,它會依據這樣的關係到建立視圖的各個表中去尋找相關欄位。並依照這樣的關係進行運算得到結果。所以視圖不須要儲存資料,僅僅須要儲存這樣的“函數關係”。
如表1是記錄長方形長的表
如表2是記錄長方形寬的表
如今建立一個視圖用來求長方形面積
當須要引用視圖的時候,視圖會依照函數關係“面積=長*寬”到表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)安全考慮:假設兩個公司合作,須要開放兩方的一些使用者資訊,可是又不想發布一些涉及隱私或機密的資訊(如使用者password)。能夠產生不包括password欄位的視圖給對方。對方直接使用視圖就可以滿足要求。
mysql---視圖