數據庫視圖的使用

什麼時候可使用視圖

  • 重用SQL語句
  • 簡化複雜SQL操作。編寫查詢後,可以方便地重用它而不必知道它基本查詢細節。
  • 使用表的組成部分而不是整個表。
  • 保護數據。可以給用戶授予表的特定部份的訪問權限而不是整個表的。
  • 更改數據格式和表示。視圖可返回與底層表的表示和格式不同的數據。

    在視圖創建後,可用與表基本相同的方式利用它們。可對視圖執行SELECT操作,過濾和排序數據,將視圖聯結到其他視圖或表,甚至能添加和更新數據(但會有限制)。
    重要的是知道視圖僅僅是用來查看存儲在別處的數據的一種設施。視圖本身不包含數據,因此它們返回的數據是從其他表中檢索出來的。在添加或更改這些表中的數據時,視圖將返回改變過的數據。

性能問題:
視圖不包含數據,所以每次使用視圖時,都必須處理查詢執行時所需的任一個檢索。如果你用多個聯結和過濾創建了複雜的視圖或者嵌套了視圖。可能會發現性能下降的很厲害。因此,在部署使用了大量視圖的應用前,應進行測試。

視圖的規則和限制

  • 與表一樣,視圖必須唯一命名(不能給視圖取與別的視圖或者表相同的名字)
  • 對於可以創建的視圖數目沒有限制。
  • 爲了創建視圖,必須有足夠訪問權限。限制通常由數據庫管理人員授予。
  • 視圖可以嵌套,即可以利用從其他視圖中檢索數據的查詢來構造一個視圖。
  • ORDER BY可以用在視圖中,但如果從該視圖檢索數據的SELECT語句中也含有ORDER BY,那麼視圖中的ORDER BY將被覆蓋。
  • 視圖不能索引,也不能有關聯的觸發器或默認值。
  • 視圖可以和表一起使用。例如,編寫一條聯結表和視圖的SELECT一起使用。

使用視圖

  • 視圖用CREATE VIEW語句來創建
  • 使用SHOW CREATE VIEW viewname; 來查看創建視圖的語句。
  • 用DROP刪除視圖,其語法爲DROP VIEW viewname;
  • 更新視圖時,可先用DROP再用CREATE,也可直接用CREATE OR REPLACE VIEW。(如果要更新的視圖不存在,則第二條更新語句會創建一個視圖;如果要更新的視圖存在,則第二條更新語句會替換原有視圖)

利用視圖簡化負責的聯結

CREATE VIEW productcustomers AS
SELECT cust_name,cust_contact,prod_id
FROM   customers cu,orders o,orderitems ot
WHERE  cu.cust_id=o.cust_id
AND    ot.order_num=o.order_num;

 這條語句創建一個名爲productcustomers的視圖,它聯結三個表,返回已訂購了任意產品的所有客戶的列表。如果執行
 SELECT * FROM productcustomers,將列出訂購了任意產品的客戶。

用視圖重新格式化檢索出的數據

SELECT CONCAT(RTRIM(vend_name),' (',RTRIM(vend_country),')')
        AS vend_title
FROM vendors
ORDER BY vend_name

現在,假如我們經常需要這個格式的結果,不必每次需要執行時執行聯結,創建一個視圖,每次需要時使用它即可。

視圖:

#創建視圖
CREATE VIEW vendorlocations AS
SELECT CONCAT(RTRIM(vend_name),' (',RTRIM(vend_country),')')
AS vend_title
FROM vendors
ORDER BY vend_name

#檢索視圖
SELECT * FROM vendorlocations

這裏寫圖片描述

用視圖過濾不想要的數據

  • 視圖對於應用普通的WHERE子句也很有用。定一個customeremaillist視圖,過濾沒有電子郵件地址的客戶
#創建視圖
CREATE VIEW customeremaillist AS
SELECT cust_id,cust_name,cust_email
FROM customers
WHERE cust_email IS NOT NULL

#檢索視圖
SELECT * FROM customeremaillist

這裏寫圖片描述

發佈了58 篇原創文章 · 獲贊 25 · 訪問量 1萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章