標籤:ges 環境 3.2 特殊 提高效率 2.3 兩種 nbsp lte
前言
前面給大家介紹了查詢語句,感覺寫的還不錯的,喜歡的可以去查看。今天給大家分享的是MySQL中的視圖。
視圖(View):視圖是由查詢結果形成一張虛擬表。非暫存資料表,只要不刪除的話就會一直存放在磁碟上,但是沒有對應的檔案。視圖的使用和正常的表的使用一樣。
一、什麼是視圖
視圖是資料庫資料的特定子集。可以禁止所有使用者訪問資料庫表,而要求使用者只能通過視圖操作資料,這種方法可以保護使用者和應用程式不受某些資料庫修改的影響。
視圖是抽象的,他在使用時,從表裡提取出資料,形成虛的表。不過對他的操作有很多的限制。
視圖是永遠不會自己消失的除非手動刪除它。
視圖有時會對提高效率有協助。暫存資料表幾乎是不會對效能有協助,是資源消耗者。
視圖一般隨該資料庫存放在一起,暫存資料表永遠都是在tempdb裡的。
視圖適合於多表串連瀏覽時使用;不適合增、刪、改,這樣可以提高執行效率。
二、視圖概述 2.1、視圖和表的區別
視圖是已經編譯好的sql語句,而表不是。
視圖沒有實際的物理記錄,而表有。
表是內容,視圖是視窗。
表只用物理空間而視圖不佔用物理空間,視圖只是邏輯概念的存在,表可以及時對它進行修改,但視圖只能有建立的語句來修改。
視圖是查看資料表的一種方法,可以查詢資料表中某些欄位構成的資料,只是一些SQL語句的集合。從安全的角度說,視圖可以不給使用者接觸資料表,從而不知道表結構。
表屬於全域模式中的表,是實表;視圖屬於局部模式的表,是虛表。
視圖的建立和刪除隻影響視圖本身,不影響對應的基本表。
2.1、視圖和表的聯絡
視圖是在基本表之上建立的表,它的結構(即所定義的列)和內容(即所有資料行)都來自基本表,它依據基本表存在而存在。
一個視圖可以對應一個基本表,也可以對應多個基本表。
視圖是基本表的抽象和在邏輯意義上建立的新關係。
2.3、視圖的類型
因為不同的資料庫,例如:Mysql、Sql Server、Oracle及DB2等,他們不論在視圖的建立和類型上都有不同,特別是在類型上區別較大,所以這裡我們以Mysql來說明總結,至於其它資料的特點會在日後繼續更新。
create [algorithm=演算法] view v_name as select 語句
algorithm = merge/temptable/undifined(前兩種任選)
在Mysql中視圖的類型分為:
1)MERGE
將視圖的sql語句和引用視圖的sql語句合并在一起,最後一起執行。
當引用視圖時,引用視圖的語句與定義視圖的語句合并。
2)TEMPTABLE
將視圖的結果集存放在暫存資料表中,每次執行時從暫存資料表中操作。
當引用視圖時,根據視圖的建立語句建立一個暫存資料表。
3)UNDEFINED
當引用視圖時,根據視圖的建立語句建立一個暫存資料表。
預設的檢視類型,DBMS傾向於選擇而不是必定選擇MERGE,因為MERGE的效率更高,更重要的是暫存資料表視圖不能更新。
所以,這裡推薦使用MERGE演算法類型視圖。
三、視圖的基本使用
環境:
3.1、建立視圖
create view v_name as select 語句;
建立完一個視圖,可以通過查看資料庫中的全部資料表來查看:
可以看到當前資料庫中已經把剛剛建立的視圖放進資料庫的表集合中了。因為視圖也是一種表,是虛擬表。
3.2、查詢
視圖的查詢和基本表的查詢一樣,因為視圖也是一種資料表,所以你可以像這樣的來查詢它
3.3、刪除視圖
drop view v_name;
刪除視圖,對基本表沒有任何的影響
3.4、修改視圖
alter view v_name as select 語句;
結果檢查:
3.5、更新視圖
1)建立新視圖
2)更新視圖
總結:更新會導致基本表中的資料也會相應的更新
四、使用視圖的優點 4.1、可以簡化查詢
查詢平均工資前三高的部門:
4.2、可以進行許可權控制
把表的許可權封閉,但是開放相應的視圖查看許可權,視圖中只開放部分資料。
4.3、大資料分表時可以用到
比如 一般情況下(無特殊最佳化)表的行數超過200w時,操作就會明顯變慢,可以把一張表的資料,拆分成多張表來存放。
利用視圖,把多張表形成一張視圖,看起來像是一整張表。
4.4、便於資料庫的維護整理
A、B表合成C表,要想讓原來的SQL不變,可以通過C表,把A、B表結構相同資料相同的視圖建立出來繼續使用。
MySQL(十)之視圖