視圖簡介
需要MySQL 5 MySQL 5新增了對視圖的支援。因此,本章內容適用於MySQL 5及以後的版本。
視圖是虛擬的表。與包含資料的表不一樣,視圖只包含使用時動態檢索資料的查詢。
理解檢視的最好方法是看一個例子:
輸入:
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';
此查詢用來檢索訂購了某個特定產品的客戶。任何需要這個資料的人都必須理解相關表的結構,並且知道如何建立查詢和對錶進行聯結。為了檢索其他產品(或多個產品)的相同數據,必須修改最後的 WHERE 子句。 現在,假如可以把整個查詢包裝成一個名為productcustomers 的虛擬表,則可以如下輕鬆地檢索出相同的資料:
輸入:
select cust_name ,cust_contact from productcustomers where prod_id = 'TNT2';
這就是視圖的作用。 productcustomers 是一個視圖,作為視圖,它不包含表中應該有的任何列或數據,它包含的是一個SQL查詢(與上面用以正確聯結表的相同的查詢)。
為什麼使用視圖
#我們已經看到了視圖應用程式的範例。下面是視圖的一些常見應用。
1.重複使用SQL語句。
2.簡化複雜的SQL操作。在編寫查詢後,可以方便地重複使用它而不必知道它的基本查詢細節。
3.使用表格的組成部分而不是整個表格。
4.保護資料。可以給使用者授予表的特定部分的存取權限而不是整個表的存取權限。
5.更改資料格式和表示。視圖可傳回與底層表的表示和格式不同的資料。
在視圖建立之後,可以用與表格基本上相同的方式利用它們。可以對視圖執行 SELECT 操作,過濾和排序數據,將視圖聯結到其他視圖或表,甚至能添加和更新數據(添加和更新數據存在某些限制。關於這個內容稍後還要做進一步的介紹)。
重要的是知道視圖只是用來查看儲存在別處的資料的一種設施。視圖本身不包含數據,因此它們傳回的數據是從其他表中檢索出來的。在新增或變更這些表中的資料時,視圖將傳回改變過的資料。
效能問題 因為視圖不包含數據,所以每次使用檢視時,都必須處理查詢執行時所需的任一個檢索。如果你用多個聯結和過濾創建了複雜的視圖或嵌套了視圖,可能會發現效能下降得很厲害。因此,在部署使用了大量視圖的應用程式之前,應該進行測試。
使用視圖
#在理解什麼是視圖(以及管理它們的規則及限制)後,我們來看一下視圖的建立。
1.視圖用 CREATE VIEW 語句來建立。
2.使用 SHOW CREATE VIEW viewname ;來查看建立視圖的語句。
3.用 DROP 刪除視圖,其語法為 DROP VIEW viewname;。
4.更新視圖時,可以先用DROP再用CREATE,也可以直接用CREATE ORREPLACE VIEW。如果要更新的檢視不存在,則第 2 條更新語句會建立一個檢視;如果要更新的檢視存在,則第 2 條更新語句會取代原有視圖。
視圖的規則和限制
以下是關於視圖建立和使用的一些最常見的規則和限制。
1.與表一樣,視圖必須唯一命名(不能給視圖取與別的視圖或表相同的名字)。
2.對於可以建立的視圖數目沒有限制。
3.為了建立視圖,必須具有足夠的存取權限。這些限制通常由資料庫管理人員授予。
4.視圖可以嵌套,也就是可以利用從其他視圖擷取資料的查詢來建構一個視圖。
5.ORDER BY 可以用在視圖中,但如果從該視圖檢索資料 SELECT 中也含有 ORDER BY ,那麼該視圖中的 ORDER BY 將會被覆寫。
6.視圖不能索引,也不能有關聯的觸發器或預設值。
7.檢視可以和表格一起使用。例如,寫一條聯結表和視圖的 SELECT語句。
以上是mysql視圖簡介及為什麼使用視圖及其規則和限制的詳細內容。更多資訊請關注PHP中文網其他相關文章!