MYSQL中視圖的用法介紹(代碼示例)

本篇文章給大家?guī)淼膬热菔顷P于mysql中視圖的用法介紹(代碼示例),有一定的參考價值,有需要的朋友可以參考一下,希望對你有所幫助。

1、什么是視圖

執(zhí)行一條SQL,將結果集保存在一張?zhí)摂M表中

(相關推薦:MySQL教程

2、為什么要使用視圖

  1. 重復利用SQL語句

  2. 簡化SQL查詢,快速取數(shù)據(jù)

  3. 只用知道表的部分結構

  4. 保護數(shù)據(jù),根據(jù)特定授權

  5. 更改數(shù)據(jù)格式和表示,視圖可返回與底層表的表示和格式不同的數(shù)據(jù)。

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

3、規(guī)則和限制

  1. 表名必須唯一(與其他視圖和表)

  2. 創(chuàng)建視圖沒有限制

  3. 足夠權限

  4. 視圖可以嵌套,可以從其他視圖查詢來構造一個視圖

  5. 如果視圖和從視圖中查詢都有order by,視圖中的order by將被覆蓋

  6. 視圖不能索引

  7. 視圖可以和表一起使用

4、使用視圖

  1. 創(chuàng)建視圖 create view

  2. 查看創(chuàng)建視圖的語句。Show create view viewname

  3. 刪除視圖 drop view viewname

  4. 更新視圖,1?? 先drop后create 2?? 直接用create or replace view

  5. 利用視圖簡化復雜的聯(lián)結查詢

5、利用視圖簡化復雜的聯(lián)結查詢

創(chuàng)建視圖

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、用視圖重新格式化檢索出的數(shù)據(jù)

select concat (rtrim(vend_name) , '(',rtrim(vend_country),')') as vend_title   from vendors order by vend_name;

如果經(jīng)常用到這個格式的話,可以創(chuàng)建一個視圖

CREATE VIEW vendorlocations AS SELECT     concat ( rtrim( vend_name ), '(', rtrim( vend_country ), ')' ) AS vend_title  FROM     vendors  ORDER BY     vend_name;

可以直接通過視圖查詢得出結果

SELECT?*?FROM?vendorlocations;

7、用視圖過濾不想要的數(shù)據(jù)

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

直接使用視圖

SELECT * from custmeremaillist ;

8、使用視圖與計算字段

mysql查詢

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

創(chuàng)建視圖

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;

9、更新視圖

通常,視圖是可以更新的(insert、update、delete)。更新視圖將更新基表。如果視圖中有以下定義將不能被更新。

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

所以視圖最好直接使用select查詢。

? 版權聲明
THE END
喜歡就支持一下吧
點贊15 分享