本篇文章給大家?guī)淼膬热菔顷P于mysql中視圖的用法介紹(代碼示例),有一定的參考價值,有需要的朋友可以參考一下,希望對你有所幫助。
1、什么是視圖
執(zhí)行一條SQL,將結果集保存在一張?zhí)摂M表中
(相關推薦:MySQL教程)
2、為什么要使用視圖
-
重復利用SQL語句
-
簡化SQL查詢,快速取數(shù)據(jù)
-
只用知道表的部分結構
-
保護數(shù)據(jù),根據(jù)特定授權
-
更改數(shù)據(jù)格式和表示,視圖可返回與底層表的表示和格式不同的數(shù)據(jù)。
注意事項
? 在視圖創(chuàng)建后,可以用與表基本相同的方式使用(查詢、過濾、排序數(shù)據(jù)、與其他視圖或連結、(添加、更新))
? 視圖只是用來查看存儲在別處的數(shù)據(jù)的設施,本身不包含數(shù)據(jù),返回的數(shù)據(jù)也是從其他表檢索出來的。
? 因為視圖本身不包含數(shù)據(jù),索引多個表連結或嵌套可能存在性能問題,需測試
3、規(guī)則和限制
-
表名必須唯一(與其他視圖和表)
-
創(chuàng)建視圖沒有限制
-
足夠權限
-
視圖可以嵌套,可以從其他視圖查詢來構造一個視圖
-
如果視圖和從視圖中查詢都有order by,視圖中的order by將被覆蓋
-
視圖不能索引
-
視圖可以和表一起使用
4、使用視圖
-
創(chuàng)建視圖 create view
-
查看創(chuàng)建視圖的語句。Show create view viewname
-
刪除視圖 drop view viewname
-
更新視圖,1?? 先drop后create 2?? 直接用create or replace view
-
利用視圖簡化復雜的聯(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查詢。