2011-03-26 15 views
2

我已閱讀關於MySQLCREATE VIEW語法,但從未在實踐中使用它。在MySQL中應用VIEW有什麼好的例子?

請給我一些它的應用程序的例子。

+0

作爲給定答案的補充,我想展示一篇文章:http://www.oraclesolved.com/general/Q_25482999-Reasons-for-using-views.jsp PS:當我閱讀該文章並添加它可以在沒有任何註冊的情況下讀取我的書籤:-S – zerkms 2011-03-26 03:13:24

回答

4

非物化視圖實際上是一個宏 - 引用視圖意味着它包含的查詢被用在視圖引用的地方。 IE:

CREATE VIEW your_vw AS 
    SELECT * 
    FROM EMPLOYEES 

此:

SELECT * FROM your_vw 

...會返回一個結果匹配你會得到什麼使用:

SELECT x.* 
    FROM (SELECT * 
      FROM EMPLOYEES) x 

我提到的非物化的,但MySQL的不支持物化視圖。其他數據庫(Oracle,SQL Server稱它們爲「索引視圖」,DB2)支持物化視圖,但這不是問題。從現在開始,我只會在寫視圖時談論非物化視圖。

視圖用於封裝/抽象 - 除非用戶有權訪問,否則他們無法查看視圖的基礎查詢是什麼。這取決於具體情況,好/壞 - 如果您擔心提供數據模型信息,在大多數情況下不好。在視圖中使用ORDER BY是不好的,因爲它需要資源來應用訂單,由於封裝/抽象,別人可能會應用訂單 - 這是浪費資源。分層視圖(建立在視圖上的視圖)也是一種不好的做法 - 在視圖運行之前,您不會收到錯誤。

視圖用於提供對數據的訪問,而無需授予對錶的訪問權限,但他們已經發展爲支持更新基礎表。我更願意爲這種情況授予訪問權限。

2

無論RDBMS如何,View都用於簡化或限制對基礎表的訪問。

一個示例是更改列的名稱,以使它們更容易被最終用戶理解和使用,以及非規範化連接。

另一個是阻止訪問敏感信息(如工資單):從表中刪除所有權限並通過視圖提供受控訪問。

+0

視圖可以更新 - [MySQL](http://dev.mysql.com/doc/refman/5.0/en/create-view.html), Oracle和SQL Server支持該功能。 – 2011-03-26 03:02:34

+0

@OMG小馬:當然。我希望沒有給出他們不可能的印象。我舉了一個例子,他們可能不是。 – 2011-03-26 03:06:24

相關問題