mysql---視圖

來源:互聯網
上載者:User

標籤:作用   使用者資訊   ==   使用   csdn   div   建立   sele   情況下   

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

文法:

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)安全考慮:假設兩個公司合作,須要開放兩方的一些使用者資訊,可是又不想發布一些涉及隱私或機密的資訊(如使用者password)。能夠產生不包括password欄位的視圖給對方。對方直接使用視圖就可以滿足要求。

mysql---視圖

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.