mysql視圖簡介及為什么使用視圖及其規(guī)則與局限
發(fā)表時間:2023-09-07 來源:明輝站整理相關(guān)軟件相關(guān)文章人氣:
[摘要]視圖簡介需要MySQL 5 MySQL 5添加了對視圖的支持。因此,本章內(nèi)容適用于MySQL 5及以后的版本。視圖是虛擬的表。與包含數(shù)據(jù)的表不一樣,視圖只包含使用時動態(tài)檢索數(shù)據(jù)的查詢。理解視圖的最好方法是看一個例子:輸入:select cust_name ,cust_contact from cu...
視圖簡介需要MySQL 5 MySQL 5添加了對視圖的支持。因此,本章內(nèi)容適用于MySQL 5及以后的版本。
視圖是虛擬的表。與包含數(shù)據(jù)的表不一樣,視圖只包含使用時動態(tài)檢索數(shù)據(jù)的查詢。
理解視圖的最好方法是看一個例子:
輸入:
select cust_name ,cust_contact from customers,orders,orderitems where customers.cust_id = orders.cust_id and orderutems.order_num = order.orders.order_num and prod_id = 'TNT2';
此查詢用來檢索訂購了某個特定產(chǎn)品的客戶。任何需要這個數(shù)據(jù)的人都必須理解相關(guān)表的結(jié)構(gòu),并且知道如何創(chuàng)建查詢和對表進(jìn)行聯(lián)結(jié)。為了檢索其他產(chǎn)品(或多個產(chǎn)品)的相同數(shù)據(jù),必須修改最后的 WHERE 子句。現(xiàn)在,假如可以把整個查詢包裝成一個名為 productcustomers 的虛擬表,則可以如下輕松地檢索出相同的數(shù)據(jù):
輸入:
select cust_name ,cust_contact from productcustomers where prod_id = 'TNT2';
這就是視圖的作用。 productcustomers 是一個視圖,作為視圖,它不包含表中應(yīng)該有的任何列或數(shù)據(jù),它包含的是一個SQL查詢(與上面用以正確聯(lián)結(jié)表的相同的查詢)。
為什么使用視圖
我們已經(jīng)看到了視圖應(yīng)用的一個例子。下面是視圖的一些常見應(yīng)用。
1.重用SQL語句。
2.簡化復(fù)雜的SQL操作。在編寫查詢后,可以方便地重用它而不必知道它的基本查詢細(xì)節(jié)。
3.使用表的組成部分而不是整個表。
4.保護(hù)數(shù)據(jù)?梢越o用戶授予表的特定部分的訪問權(quán)限而不是整個表的訪問權(quán)限。
5.更改數(shù)據(jù)格式和表示。視圖可返回與底層表的表示和格式不同的數(shù)據(jù)。
在視圖創(chuàng)建之后,可以用與表基本相同的方式利用它們?梢詫σ晥D執(zhí)行 SELECT 操作,過濾和排序數(shù)據(jù),將視圖聯(lián)結(jié)到其他視圖或表,甚至能添加和更新數(shù)據(jù)(添加和更新數(shù)據(jù)存在某些限制。關(guān)于這個內(nèi)容稍后還要做進(jìn)一步的介紹)。
重要的是知道視圖僅僅是用來查看存儲在別處的數(shù)據(jù)的一種設(shè)施。視圖本身不包含數(shù)據(jù),因此它們返回的數(shù)據(jù)是從其他表中檢索出來的。在添加或更改這些表中的數(shù)據(jù)時,視圖將返回改變過的數(shù)據(jù)。
性能問題 因為視圖不包含數(shù)據(jù),所以每次使用視圖時,都必須處理查詢執(zhí)行時所需的任一個檢索。如果你用多個聯(lián)結(jié)和過濾創(chuàng)建了復(fù)雜的視圖或者嵌套了視圖,可能會發(fā)現(xiàn)性能下降得很厲害。因此,在部署使用了大量視圖的應(yīng)用前,應(yīng)該進(jìn)行測試。
使用視圖
在理解什么是視圖(以及管理它們的規(guī)則及約束)后,我們來看一下視圖的創(chuàng)建。
1.視圖用 CREATE VIEW 語句來創(chuàng)建。
2.使用 SHOW CREATE VIEW viewname ;來查看創(chuàng)建視圖的語句。
3.用 DROP 刪除視圖,其語法為 DROP VIEW viewname;。
4.更新視圖時,可以先用DROP再用CREATE,也可以直接用CREATE ORREPLACE VIEW。如果要更新的視圖不存在,則第 2 條更新語句會創(chuàng)建一個視圖;如果要更新的視圖存在,則第 2 條更新語句會替換原有視圖。
視圖的規(guī)則和限制
下面是關(guān)于視圖創(chuàng)建和使用的一些最常見的規(guī)則和限制。
1.與表一樣,視圖必須唯一命名(不能給視圖取與別的視圖或表相同的名字)。
2.對于可以創(chuàng)建的視圖數(shù)目沒有限制。
3.為了創(chuàng)建視圖,必須具有足夠的訪問權(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ā)器或默認(rèn)值。
7.視圖可以和表一起使用。例如,編寫一條聯(lián)結(jié)表和視圖的 SELECT語句。
以上就是mysql視圖簡介及為什么使用視圖及其規(guī)則和限制的詳細(xì)內(nèi)容,更多請關(guān)注php中文網(wǎng)其它相關(guān)文章!
學(xué)習(xí)教程快速掌握從入門到精通的SQL知識。