MYSQL中視圖的使用

1、什麼是視圖

執行一條SQL,將結果集保存在一張虛擬表中

2、爲什麼要使用視圖

  1. 重複利用SQL語句
  2. 簡化SQL查詢,快速取數據
  3. 只用知道表的部分結構
  4. 保護數據,根據特定授權
  5. 更改數據格式和表示,視圖可返回與底層表的表示和格式不同的數據。

注意事項
• 在視圖創建後,可以用與表基本相同的方式使用(查詢、過濾、排序數據、與其他視圖或連結、(添加、更新))
• 視圖只是用來查看存儲在別處的數據的設施,本身不包含數據,返回的數據也是從其他表檢索出來的。
• 因爲視圖本身不包含數據,索引多個表連結或嵌套可能存在性能問題,需測試

3、規則和限制

  1. 表名必須唯一(與其他視圖和表)
  2. 創建視圖沒有限制
  3. 足夠權限
  4. 視圖可以嵌套,可以從其他視圖查詢來構造一個視圖
  5. 如果視圖和從視圖中查詢都有order by,視圖中的order by將被覆蓋
  6. 視圖不能索引
  7. 視圖可以和表一起使用

4、使用視圖

  1. 創建視圖 create view
  2. 查看創建視圖的語句。Show create view viewname
  3. 刪除視圖 drop view viewname
  4. 更新視圖,1⃣️ 先drop後create 2⃣️ 直接用create or replace view
  5. 利用視圖簡化複雜的聯結查詢

5、利用視圖簡化複雜的聯結查詢

創建視圖

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

使用視圖

SELECT cust_name, cust_contact
FROM productcustomers
WHERE prod_id = 'TNT2';

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

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;

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章