Navicat使用教程:了解關(guān)系數(shù)據(jù)庫中的視圖
數(shù)據(jù)庫視圖是一個虛擬表或邏輯表,由SELECT查詢組成。與數(shù)據(jù)庫表非常相似,視圖也包含可以查詢的行和列。包括MySQL在內(nèi)的大多數(shù)數(shù)據(jù)庫管理系統(tǒng),甚至都允許您通過視圖更新基礎(chǔ)表中的數(shù)據(jù),但有一些需要注意的事項(xiàng)。在今天的文章中,我們將學(xué)習(xí)一種視圖以及如何使用Navicat Premium作為客戶端為MySQL 8創(chuàng)建視圖。
Navicat Premium 是一套數(shù)據(jù)庫管理工具,讓你使用一個程序即可同時連接到 MySQL、MariaDB、SQL Server、SQLite、Oracle 和 PostgreSQL 數(shù)據(jù)庫。
基本語法
在MySQL中,您可以使用CREATE VIEW語句創(chuàng)建一個新視圖。這是基本語法:
CREATE [ALGORITHM = {MERGE | TEMPTABLE | UNDEFINED}] VIEW view_name [(column_list)] AS select-statement;
現(xiàn)在,讓我們更詳細(xì)地檢查語法。
視圖處理算法
ALGORITHM屬性告訴MySQL創(chuàng)建視圖時使用哪種機(jī)制。MySQL提供了三種算法:MERGE、TEMPTABLE和UNDEFINED:
MERGE算法將輸入查詢與定義視圖的SELECT語句組合為一個查詢。然后,MySQL執(zhí)行組合查詢以返回合并的結(jié)果集。MERGE算法不能應(yīng)用于包含聚合函數(shù)(例如MIN、MAX、SUM、COUNT、AVG或DISTINCT、GROUP BY、HAVING、LIMIT、UNION和UNION ALL)的SELECT語句。如果無法應(yīng)用MERGE算法,MySQL會自動將算法更改為UNDEFINED。
TEMPTABLE算法首先基于定義視圖的SELECT語句創(chuàng)建一個臨時表,然后針對該臨時表執(zhí)行輸入查詢。因?yàn)镸ySQL必須創(chuàng)建一個臨時表來存儲結(jié)果集并將數(shù)據(jù)從基表移到臨時表,所以TEMPTABLE算法的效率不如MERGE算法。
創(chuàng)建視圖而不指定顯式算法時,UNDEFINED是默認(rèn)算法。UNDEFINED算法使MySQL可以選擇使用MERGE還是TEMPTABLE算法。由于效率更高,MySQL首先選擇了MERGE算法,但如果不能采用MERGE,則會選擇TEMPTABLE算法。
視圖名稱
只要遵循與表相同的命名規(guī)則,就可以為視圖選擇任何名稱。此外,視圖和表在數(shù)據(jù)庫中共享相同的名稱空間,因此您不能為視圖指定與任何現(xiàn)有視圖相同的名稱。
SELECT語句
在SELECT語句中,您可以從數(shù)據(jù)庫中存在的任何表或視圖中查詢數(shù)據(jù)。但是,SELECT語句遵循一些規(guī)則:
SELECT語句可以在WHERE子句中包含子查詢,但不能在FROM子句中包含子查詢。
SELECT語句不能引用任何變量,包括局部變量、用戶變量和會話變量。
SELECT語句不能引用準(zhǔn)備好的語句的參數(shù)。
在Navicat中創(chuàng)建視圖
在Navicat中,可以通過單擊主工具欄上的“視圖”按鈕,然后單擊“對象”工具欄上的“新視圖”來創(chuàng)建新視圖:
“定義”選項(xiàng)卡是您編寫SQL的地方。您甚至可以使用View Builder來幫助編寫語句!
可以在“高級”選項(xiàng)卡上找到“算法”,以及其他一些選項(xiàng):
完成后,您可以使用“預(yù)覽”按鈕測試您的“視圖”,然后單擊“保存”將其保存。
結(jié)論
視圖是將一個或多個表的數(shù)據(jù)以可查詢的格式組合在一起的好方法,但請記住,使用數(shù)據(jù)庫視圖存在一些缺點(diǎn)。首先,從數(shù)據(jù)庫視圖查詢數(shù)據(jù)可能會很慢——特別是如果該視圖是基于其他視圖創(chuàng)建的。此外,每當(dāng)更改視圖引用的表的結(jié)構(gòu)時,都必須記住要更改視圖。
想要購買Navicat Premium正版授權(quán),或了解更多產(chǎn)品信息請點(diǎn)擊“咨詢在線客服”