mysql---视图
視圖是一張?zhí)摂M的表,并沒有實際存儲數(shù)據(jù),存儲的是一種“函數(shù)關(guān)系”。
語法:
create view 視圖名 as select語句。
為什么說視圖存儲的是一種函數(shù)關(guān)系?
當(dāng)引用視圖時,它會依據(jù)這樣的關(guān)系到創(chuàng)建視圖的各個表中去尋找相關(guān)字段。并依照這樣的關(guān)系進(jìn)行運算得到結(jié)果。所以視圖不須要存儲數(shù)據(jù),僅僅須要存儲這樣的“函數(shù)關(guān)系”。
如表1是記錄長方形長的表
| 長(cm) |
| 10 |
如表2是記錄長方形寬的表
| 寬(cm) |
| 20 |
如今創(chuàng)建一個視圖用來求長方形面積
| 面積 |
| 長*寬 |
以上表設(shè)計不嚴(yán)謹(jǐn)僅僅是為了說明問題。
表改變會改變視圖嗎?
由于是函數(shù)關(guān)系f(x,y)。當(dāng)x或者y有一個變化時。f(x,y)的值一定會變化。x和y相當(dāng)于創(chuàng)建視圖的表,f(x,y)相當(dāng)于視圖。
創(chuàng)建一張學(xué)生成績表
各個字段分別代表“學(xué)生ID”。“數(shù)學(xué)成績”,“語文成績”。“英語成績”。
如今創(chuàng)建一個求各個學(xué)生平均成績的視圖
對表做一下修改,看看視圖會不會跟著一起變化
再看看視圖的內(nèi)容
視圖的確變化了。所以表的變化一定會影響視圖。
視圖改變會改變表嗎?
這不一定。假設(shè)視圖和表是以一個相應(yīng)的,即f(x,y)能夠反得到x,y(類似反函數(shù)關(guān)系)。
這樣的情況下。視圖改變會影響原有表。
對于求平均成績的視圖,無法由平均成績得到各科的成績,所以他們不是一一相應(yīng)關(guān)系,這樣的情況Mysql不同意改變視圖。
視圖有三種實現(xiàn)方式
merge:引用視圖時。將引用時的條件與創(chuàng)建視圖時的條件合并。構(gòu)成新的查詢語句去各個表中查詢。
以之前的平均分視圖為例。紅色劃線為創(chuàng)建視圖的查詢語句
如今要求平均分前三高的學(xué)生,能夠直接引用視圖來查詢
假設(shè)algorithm設(shè)置為merge
實際的操作是將這兩次的查詢條件合并相當(dāng)于
temptable:引用視圖時。先依照創(chuàng)建視圖的條件查詢各個表,將結(jié)果生成暫時表,再對暫時表進(jìn)行查詢。
undefined:數(shù)據(jù)庫默認(rèn)undefined,由數(shù)據(jù)庫依據(jù)情況決定用merge還是temptable。
視圖的作用
(1)方便操作:假設(shè)要經(jīng)經(jīng)常使用到某個暫時表時,比方上面的平均分視圖。假設(shè)未定義視圖,每次都須要求平均分暫時表。再去對暫時表進(jìn)行查詢。有視圖就非常方便。直接查詢視圖就能夠了。
(2)安全考慮:假設(shè)兩個公司合作,須要開放兩方的一些用戶信息,可是又不想發(fā)布一些涉及隱私或機密的信息(如用戶password)。能夠生成不包括password字段的視圖給對方。對方直接使用視圖就可以滿足要求。
總結(jié)
以上是生活随笔為你收集整理的mysql---视图的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Restful风格,PUT修改功能请求,
- 下一篇: Oracle 11g Express E