基础-使用视图(CREATE VIEW....AS....)
什么是視圖
視圖是虛擬的表,與包含數(shù)據(jù)的表不一樣,視圖只包含使用時動態(tài)檢索數(shù)據(jù)的查詢;
輸入:SELECT??cust_name,cust_contact
??????????FROM????customers,orders,orderitems
??????????WHERE??customers.cust_id = orders.cust_id
??????????????AND??orderitems.order_num = orders.order_num
??????????????AND??prod_id = 'TNT2';
現(xiàn)在,假如可以把整個查詢包裝成一個名為productcustomers的虛擬表,則可以把上述查詢語句改為:
輸入:SELECT??cust_name,cust_contact
??????????FROM????productcustomers
??????????WHERE??prod_id = 'TNT2';
這就是視圖的作用,productcustomers是一個視圖,不包含表中應(yīng)該有的任何列或數(shù)據(jù),它包含的是一個SQL查詢;
為什么使用視圖
1.重用SQL語句;
2.簡化復(fù)雜的SQL操作。在編寫查詢后,可以方便地重用它而不必知道它的基本查詢細節(jié);
3.使用表的組成部分而不是整個表;
4.保護數(shù)據(jù)。可以給用戶授予表的特定部分的訪問權(quán)限而不是整個表的訪問權(quán)限;
5.更改數(shù)據(jù)格式和表示。視圖可返回與底層表的表示和格式不同的數(shù)據(jù);
視圖創(chuàng)建后,像表一樣使用它即可;可以對視圖執(zhí)行SELECT操作,過濾和排序數(shù)據(jù),將視圖聯(lián)結(jié)到其他視圖或表,甚至能添加和更新數(shù)據(jù)(添加和更新數(shù)據(jù)存在某些限制);
重要的是,視圖僅僅是用來查看存儲在別處的數(shù)據(jù)的一種措施,視圖本身不包含數(shù)據(jù),因此它們返回的數(shù)據(jù)是從其他的表中檢索出來的;在添加或更改這些表中的數(shù)據(jù)時,視圖將返回更改過的數(shù)據(jù);
性能問題:因為視圖不包含數(shù)據(jù),所以每次使用視圖時,都必須處理查詢執(zhí)行時所需的任一個檢索;如果你用多個聯(lián)結(jié)和過濾創(chuàng)建了復(fù)雜的視圖或者嵌套了視圖,可能會發(fā)現(xiàn)性能下降得很厲害;因此,在部署使用了大量視圖的應(yīng)用前,應(yīng)該進行測試;
視圖的規(guī)則和限制
1.與表一樣,視圖的名字必須唯一,不能和其他的視圖或表的名字相同;
2.沒有說,視圖最多只能創(chuàng)建多少個,這種說法;
3.為了創(chuàng)建視圖,必須具有足夠的訪問權(quán)限;這些權(quán)限通常由數(shù)據(jù)庫管理人員授予;
4.視圖可以嵌套,即可以利用從其他視圖中檢索數(shù)據(jù)的查詢來構(gòu)造一個視圖;
5.ORDER BY可以用在視圖中,但如果從該視圖檢索數(shù)據(jù)SELECT中也含有ORDER BY,那么該視圖中的ORDER BY將被覆蓋;
6.視圖不能索引,也不能有關(guān)聯(lián)的觸發(fā)器或默認值;
7.視圖可以和表一起使用。例如,編寫一條聯(lián)結(jié)表和視圖的SELECT語句;
使用視圖
1.視圖用CREATE VIEW語句來創(chuàng)建;
2.使用SHOW CREATE VIEW viewname;來查看創(chuàng)建視圖的語句;
3.用DROP刪除視圖,其語法為DROP VIEW viewname;
4.更新視圖時,可以先用DROP再用CREATE,也可以直接用CREATE OR REPLACE VIEW;如果要更新的視圖不存在,則第2條更新語句會創(chuàng)建一個視圖;如果要更新的視圖存在,則第2條更新語句會替換原有視圖;
利用視圖簡化復(fù)雜的聯(lián)結(jié)
視圖的最常見的應(yīng)用之一是隱藏復(fù)雜的SQL,這通常會涉及聯(lián)結(jié);
從這個例子可以看出,視圖簡化了復(fù)雜SQL語句的使用;利用視圖,可以一次編寫基礎(chǔ)的SQL,然后根據(jù)需要多次使用;
用視圖重新格式化檢索出的數(shù)據(jù)
用視圖過濾不想要的數(shù)據(jù)
視圖對于應(yīng)用普通的WHERE子句也很有用,例如, 可以定義customeremaillist視圖,它過濾沒有電子郵件地址的客戶;
WHERE子句與WHERE子句:如果從視圖檢索數(shù)據(jù)時使用了一條WHERE子句,則兩組子句(一組在視圖中,另一組是傳遞給視圖的)將自動組合;
使用視圖與計算字段
視圖對于簡化計算字段的使用特別有用;
更新視圖
通常,視圖是可更新的(即,可以對它們使用INSERT、UPDATE和DELETE);更新一個視圖將更新其基表(可以回憶一下,視圖本身沒有數(shù)據(jù));如果你對視圖增加或刪除行,實際上是對其基表增加或刪除行;
但是,并非所有視圖都是可更新的;基本上可以說,如果MySQL不能正確地確定被更新的基數(shù)據(jù),則不允許更新(包括插入和刪除);即如果視圖定義中有以下操作,則不能更新:
1.分組(使用GROUP BY和HAVING):
2.聯(lián)結(jié);
3.子查詢;
4.并;
5.聚集函數(shù)(Min()、Count()、Sum()等);
6.DISTINCT;
7.導(dǎo)出(計算)列;、
所以,上述的許多例子都是不可更新的;
因為視圖主要用于數(shù)據(jù)檢索,一般將視圖用于檢索(SELECT語句)而不用于更新(INSERT、UPDATE和DELETE);
總結(jié)
視圖為虛擬的表。它們包含的不是數(shù)據(jù)而是根據(jù)需要檢索數(shù)據(jù)的查詢;
視圖提供了一種MySQL的SELECT語句層次的封裝,可用來簡化數(shù)據(jù)處理以及重新格式化基礎(chǔ)數(shù)據(jù)或保護基礎(chǔ)數(shù)據(jù);
————————————————
版權(quán)聲明:本文為CSDN博主「Iovems」的原創(chuàng)文章,遵循 CC 4.0 BY-SA 版權(quán)協(xié)議,轉(zhuǎn)載請附上原文出處鏈接及本聲明。
原文鏈接:https://blog.csdn.net/Regemc/article/details/80641652
總結(jié)
以上是生活随笔為你收集整理的基础-使用视图(CREATE VIEW....AS....)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 大型主机的发展
- 下一篇: Visio中图形关于轴线对称