1. 程式人生 > >視圖和表的區別和聯系

視圖和表的區別和聯系

比較 方式 使用 連接 算法 他在 集合 區別 存在可更新

數據庫中的數據都是存儲在表中的,而視圖只是一個或多個表依照某個條件組合而成的結果集,一般來說你可以用update,insert,delete等sql語句修改表中的數據,而對視圖只能進行select操作。但是也存在可更新的視圖,對於這類視圖的update,insert和delete等操作最終會作用於與其相關的表中數據。因此,表是數據庫中數據存儲的基礎,而視圖只是為了滿足某種查詢要求而建立的一個對象。

表是物理存在的,你可以理解成計算機中的文件!
視圖是虛擬的內存表,你可以理解成Windows的快捷方式!

1.視圖是數據庫數據的特定子集。可以禁止所有用戶訪問數據庫表,而要求用戶只能通過視圖操作數據,這種方法可以保護用戶和應用程序不受某些數據庫修改的影響。2.視圖是抽象的,他在使用時,從表裏提取出數據,形成虛的表。 不過對他的操作有很多的限制 。

3. 而且視圖是永遠不會自己消失的除非你刪除它。
視圖有時會對提高效率有幫助。臨時表幾乎是不會對性能有幫助,是資源消耗者。
視圖一般隨該數據庫存放在一起,臨時表永遠都是在tempdb裏的。
4.視圖適合於多表連接瀏覽時使用!不適合增、刪、改.,存儲過程適合於使用較頻繁的SQL語句,這樣可以提高 執行效率!


視圖和表的區別和聯系

區別:

1、視圖是已經編譯好的sql語句。而表不是

2、視圖沒有實際的物理記錄。而表有。
3、表是內容,視圖是窗口
4、表只用物理空間而視圖不占用物理空間,視圖只是邏輯概念的存在,表可以及時四對它進行修改,但視圖只能有創建的語句來修改

5、表是內模式,試圖是外模式
6、視圖是查看數據表的一種方法,可以查詢數據表中某些字段構成的數據,只是一些SQL語句的集合。從安全的角度說,視圖可以不給用戶接觸數據表,從而不知道表結構。
7、表屬於全局模式中的表,是實表;視圖屬於局部模式的表,是虛表。

8、視圖的建立和刪除只影響視圖本身,不影響對應的基本表。

9、不能對視圖進行update或者insert into操作。


聯系:

視圖(view)是在基本表之上建立的表,它的結構(即所定義的列)和內容(即所有數據行)都來自基本表,它依據基本表存在而存在。一個視圖可以對應一個基本表,也可以對應多個基本表。視圖是基本表的抽象和在邏輯意義上建立的新關系。

總而言之:

簡單說就是,視圖是一個子查詢,性能肯定會比直接查詢要低(盡管sql內部有優化),所以使用視圖時有一個必須要註意的,就是不要嵌套使用查詢。尤其是復雜查詢。


那要視圖有什麽用?

1、當一個查詢你需要頻頻的作為子查詢使用時,視圖可以簡化代碼,直接調用而不是每次都去重復寫這個東西,有點高級語言中的封裝的意思吧。
2、其實視圖還有很多其他的用處,比如說你是一個系統的數據庫管理員,你需要給他人提供一張表的某兩列數據,而不希望他可以看到其他任何數據,這樣你就可以給他建一個只有這兩列數據的視圖,然後把視圖公布給他。
常用視圖的場合應該就上述兩處了,至少我經常在這兩種情況下使用視圖,其他地方用視圖的還真不多。

追問:
沒有解決方案嗎
追答:
什麽解決方案?性能損失方面的解決方案?
如果是性能損失方面的解決方案,沒有。
也可以說有,就是對視圖的查詢語句進行優化。
通常來說直接查詢和查詢視圖是沒有什麽區別的(sql 本身會進行優化),除非是視圖嵌套了視圖,或者子查詢很復雜要計算。

特別說明:

每次SELECT 視圖 的時候,視圖都會重新計算創建它的規則(sql算法),如果算法復雜,數據量大,就會比較慢,那樣每次就很慢了。

而且,表的索引對於視圖view來說是無效的,它是全表掃描的。

轉自: http://www.cnblogs.com/binyao/p/4899970.html 和 http://blog.csdn.net/zengmingen/article/details/51004203

視圖和表的區別和聯系