mysql視圖和臨時表的區別

視圖數據庫

視圖是由從數據庫的基本表中選出來的數據組成的邏輯窗口,它與基本表不一樣的是,視圖是一個虛表。數據庫中只存放視圖的定義,而不存放視圖包含的數據,這些數據仍存放在原來的基表中。因此基表中的數據若是發生改變,從視圖中查詢出的數據也隨之改變。安全

視圖是一個虛表,他是經過執行SQL查詢所產生的。視圖以select命名存儲於數據字典當中。每當SQL查詢包含有視圖名稱的時候,數據庫管理系統會執行在視圖定義當中所包含的查詢,以創建其虛擬結果表。該結果表能夠當作查詢其他部分的源表使用。session

視圖能夠是創建在一個或多個表上,也能夠創建在視圖上,可是無論怎麼樣對視圖數據的操做最終都會轉換爲對基本表的操做,由於視圖是一個虛表,數據實際上保存在基本表中ui

臨時表事務

臨時表是創建在系統臨時文件夾中的表,若是使用得當,徹底能夠像普通表同樣進行各類操做,在VFP退出時自動被釋放。同步

臨時表是一種並不存儲在數據庫當中的基表。與之相反的是,臨時表只存在於建立該臨時表的數據庫會話被激活的狀況下。it

臨時表存儲在數據庫會話中,不在數據庫中,當使用show tables 時沒有顯示,可是能夠查詢,當關閉數據庫(quit,exit)而後在打開在去數據庫中查詢的時候就不存在了。io

視圖和臨時表的區別table

一、視圖只存在於單個查詢當中,每次使用該視圖名,其虛擬表就會根據現有的數據從新被建立。 二、臨時表存在於它被建立的整個數據庫會話過程當中。 三、視圖自動使用其所定義的查詢檢索出來的數據進行填充。 四、必須使用SQLINSERT命令來向臨時表添加數據。 五、只有那些符合視圖可更新能力標準的視圖纔可用於數據修改。當使用視圖進行更新時,該更新會永久被傳遞至底層基表上。 六、因爲臨時表都是基表,所以全部的臨時表都是可更新的。不過,這些更新對於這些表來講是臨時性的。 七、因爲視圖的內容是在該視圖每次被使用的時候才生成,所以視圖當中的數據幾乎每次都是最新的。 八、臨時表當中的數據所反應的是數據庫在該表被裝載進數據庫時的狀態。若是臨時表所裝載的源表中的數據在臨時表檢索這些數據以後發生了改變,那麼臨時表當中的內容有可能與數據庫當中的其餘部分的數據脫離同步狀態。變量

優缺點

一、因爲視圖的內容是在該視圖每次被使用的時候才生成,因此數據和數據庫中的數據是同步的,可是在每次查詢的時候都要創建視圖表結構,因此比較浪費時間。 二、臨時表僅需建立一次,因此相比視圖每次都建立視圖結構,節省了大量時間,可是臨時表的數據在數據源發生改變是沒有進行更新的話,就會出現數據不一樣步現象。 三、簡化數據查詢語句——定義視圖能夠將表與表之間的複雜的鏈接操做和搜索條件對用戶影藏起來,用戶只需簡單的對一個視圖進行查詢便可。 四、使用戶能從多角度看待同一數據。 五、提升了數據的安全性———在創建視圖的時候能夠吧敏感的數據影藏起來,而吧須要的數據暴露給客戶這樣的話比較安全。 六、提供了必定程度的邏輯獨立性——數據庫中是三級模式兩級映射,三級模式是 外模式、模式、內模式而這裏的視圖就是外模式,這樣就提供了數據的邏輯獨立性。

何時使用視圖呢?

應用場景1:保密工做,好比有一個員工工資表,若是你只但願財務看到員工工資這個字段,而其餘人不能看到工資字段,那就用一個視圖,把工資這個敏感字段過濾掉

應用場景2:有一個查詢語句很是複雜,大概有100行這麼多,有時還想把這個巨大無比的select語句和其餘表關聯起來獲得結果,寫太多很麻煩,能夠用一個視圖來代替這100行的select語句,充當一個變量角色

何時用臨時表呢?

應用場景1:你在短時間內有不少DML操做,好比京東淘寶亞馬遜的購物車表,把東西放購物車(insert),變動數量(update),刪除商品(delete),一旦結算金錢後,這些數據就要清掉,這時須要用臨時表

應用場景2:在導出數據時,你可能不想導完整的數據庫,或者表,你可能只想要導出符合某些條件的數據,那麼你能夠建立臨時表,把select語句插入到臨時表,接着導出這個臨時表,導完之後經過結束session或者事務的方式,讓這些沒用的數據自動清理掉

應用場景3:你在寫存儲過程時,有不少的鏈接,好比你須要鏈接A,B,C,D,E,F,G,H那麼多張表,才能獲得你的結果表,同時作鏈接的消耗太大,你能夠先A,B,C鏈接的結果,放在臨時表,接着再把這張臨時表,跟D,E,F鏈接,做爲新的結果放在臨時表,接着再把臨時表與G,H鏈接,最後獲得臨時表數據,一次插入到結果表(永久表)。

相關文章
相關標籤/搜索