資料庫檢視是由 SELECT 查詢組成的虛擬或邏輯資料表。與資料庫的資料表非常相似,檢視也包含可以查詢的列和欄。大多數資料庫管理系統(包括 MySQL)甚至允許你透過檢視更新基礎資料表中的資料,但可能會有警告。在本篇文章中,我們將了解什麼是檢視以及如何使用 Navicat Premium 作為我們的用戶端在 MySQL 8 建立一個檢視。
基本語法
在 MySQL 中,使用 CREATE VIEW 語句來建立新檢視。這是基本語法:
CREATE
[ALGORITHM = {MERGE | TEMPTABLE | UNDEFINED}]
VIEW view_name [(column_list)]
AS
select-statement;
現在,我們更詳細地研究一下這語法。
檢視處理演算法
ALGORITHM 屬性告訴 MySQL 在建立檢視時使用哪種機制。MySQL 提供三種演算法:MERGE、TEMPTABLE 和 UNDEFINED:
- MERGE 演算法將輸入查詢與定義檢視的 SELECT 語句組合成一個查詢。MySQL 然後執行組合查詢以傳回合併的結果集。MERGE 演算法不能套用於包含彙總函式(MIN、MAX、SUM、COUNT、AVG)或DISTINCT、GROUP BY、HAVING、LIMIT、UNION 和 UNION ALL等的 SELECT 語句。如果無法套用 MERGE 演算法,MySQL 會自動將演算法變更為 UNDEFINED。
- TEMPTABLE 演算法首先根據定義檢視的 SELECT 語句建立一個臨時資料表,然後針對此臨時資料表執行輸入查詢。因為 MySQL 必須建立臨時資料表來儲存結果集並將資料從基礎資料表移動到臨時資料表,所以 TEMPTABLE 演算法的效率比 MERGE 演算法低。
- UNDEFINED 是建立檢視時未指定明確演算法的預設演算法。UNDEFINED 演算法使 MySQL 可以選擇使用 MERGE 或 TEMPTABLE 演算法。MySQL 優先使用 MERGE 演算法,因為它的效率更高,但如果無法使用 MERGE 演算法,則會使用 TEMPTABLE 演算法。
檢視名稱
你可以為檢視圖選擇任何名稱,只要遵循與資料表相同的命名規則即可。此外,檢視和資料表在資料庫中共享相同的命名空間,因此你不能將檢視命名為與任何現有資料表和檢視相同的名稱。
SELECT 語句
在 SELECT 語句中,你可以從資料庫中存在的任何資料表或檢視查詢資料。但是,SELECT 語句必須遵循幾個規則:
- SELECT 語句可以在 WHERE 子句中包含子查詢,但不能在 FROM 子句中。
- SELECT 語句不能參考任何變數,包括區域變數、使用者變數和階段作業變數。
- SELECT 語句不能參考預備語句的參數。
在 Navicat 中建立檢視
在 Navicat 中,你可以按一下主要工具列上的「檢視」按鈕,然後按一下物件工具列上的「新增檢視」來建立新檢視:
![](/link/Blog/Image/2019/20190416/CT/new_view_button.jpg)
在「定義」索引標籤編寫 SQL。你甚至可以使用「檢視建立工具」幫助編寫語句!
![](/link/Blog/Image/2019/20190416/CT/view_definition_tab.jpg)
你可以在「進階」索引標籤上找到「演算法」設定,以及其他一些選項:
![](/link/Blog/Image/2019/20190416/CT/view_advanced_tab.jpg)
完成後,你可以使用「預覽」按鈕測試檢視,然後按一下「儲存」以儲存檢視。
總結
檢視是以可以查詢的格式組合一個或多個資料表的資料的一個好方法,但請記住,使用資料庫檢視亦存在一些缺點。首先,查詢資料庫檢視的資料可能很慢,特別是如果檢視是以其他檢視為基礎而建立的。此外,每當變更檢視參考的資料表的結構時,你都必須記住要同時變更檢視。