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