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