MYSQL中視圖的使用

一、什麼是視圖

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

二、爲何要使用視圖

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

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

三、規則和限制

  1. 表名必須惟一(與其餘視圖和表)
  2. 建立視圖沒有限制
  3. 足夠權限
  4. 視圖能夠嵌套,能夠從其餘視圖查詢來構造一個視圖
  5. 若是視圖和從視圖中查詢都有order by,視圖中的order by將被覆蓋
  6. 視圖不能索引
  7. 視圖能夠和表一塊兒使用

四、使用視圖

  1. 建立視圖 create view
  2. 查看建立視圖的語句。Show create view viewname
  3. 刪除視圖 drop view viewname
  4. 更新視圖,1⃣️ 先drop後create 2⃣️ 直接用create or replace view
  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';

六、用視圖從新格式化檢索出的數據

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;

能夠直接經過視圖查詢得出結果code

SELECT * FROM vendorlocations;排序

七、用視圖過濾不想要的數據

create view custmeremaillist AS
SELECT cust_id ,cust_name,cust_email
from customers
where cust_email is not NULL;

直接使用視圖索引

SELECT * from custmeremaillist ;

八、使用視圖與計算字段

mysql查詢rem

SELECT
    prod_id,
    quantity,
    item_price,
    quantity * item_price AS expanded_price 
FROM
    orderitems
WHERE order_num=20005;

建立視圖it

CREATE VIEW orderitemsexpanded AS
SELECT
    order_num,
    prod_id,
    quantity,
    item_price,
    quantity * item_price AS expanded_price 
FROM
    orderitems
WHERE order_num=20005;

使用視圖

SELECT
    *
FROM
    orderitemsexpanded
WHERE order_num=20005;

九、更新視圖

一般,視圖是能夠更新的(insert、update、delete)。更新視圖將更新基表。若是視圖中有如下定義將不能被更新。

1. 分組(group by 和 having)
2. 聯結
3. 自查詢
4. 並
5. 聚合函數(min()、count()、sum()等)
6. Distinct
7. 導出(計算)列

因此視圖最好直接使用select查詢

以上內容均引自《mysql必知必會》
相關文章
相關標籤/搜索