1. 程式人生 > >MySQL--檢視定義&操作

MySQL--檢視定義&操作

MySQL 從5.0.1 版本開始提供檢視功能。

定義

檢視(View)是一種虛擬存在的表,對於使用檢視的使用者來說基本上是透明的。檢視並不在資料庫中實際存在,行和列資料來自定義檢視的查詢中使用的表,並且是在使用檢視時動態生成的。

檢視相對於普通的表的優勢主要包括以下幾項。

  • 簡單:使用檢視的使用者完全不需要關心後面對應的表的結構、關聯條件和篩選條件,對使用者來說已經是過濾好的複合條件的結果集。
  • 安全:使用檢視的使用者只能訪問他們被允許查詢的結果集,對錶的許可權管理並不能限制到某個行某個列,但是通過檢視就可以簡單的實現。
  • 資料獨立:一旦檢視的結構確定了,可以遮蔽表結構變化對使用者的影響,源表增加列對檢視沒有影響;源表修改列名,則可以通過修改檢視來解決,不會造成對訪問者的影響。

操作

檢視的操作包括建立或者修改檢視、刪除檢視,以及檢視檢視定義。

建立或者修改檢視

建立檢視需要有CREATE VIEW 的許可權,並且對於查詢涉及的列有SELECT 許可權。如果使用CREATE OR REPLACE 或者ALTER 修改檢視,那麼還需要該檢視的DROP 許可權。 建立檢視的語法為:

CREATE [OR REPLACE] [ALGORITHM = {UNDEFINED | MERGE | TEMPTABLE}]
VIEW view_name [(column_list)]
AS select_statement
[WITH [CASCADED | LOCAL] CHECK OPTION]

修改檢視的語法為:

ALTER [ALGORITHM = {UNDEFINED | MERGE | TEMPTABLE}]
VIEW view_name [(column_list)]
AS select_statement
[WITH [CASCADED | LOCAL] CHECK OPTION]

MySQL 檢視的定義有一些限制,例如,在FROM 關鍵字後面不能包含子查詢,這和其他資料庫是不同的,如果檢視是從其他資料庫遷移過來的,那麼可能需要因此做一些改動,可以將子查詢的內容先定義成一個檢視,然後對該檢視再建立檢視就可以實現類似的功能了。

檢視的可更新性和檢視中查詢的定義有關係,以下型別的檢視是不可更新的。

  • 包含以下關鍵字的SQL 語句:聚合函式(SUM、MIN、MAX、COUNT 等)、DISTINCT、GROUP BY、HAVING、UNION 或者UNION ALL。
  • 常量檢視。
  • SELECT 中包含子查詢。
  • JION。
  • FROM 一個不能更新的檢視。
  • WHERE 字句的子查詢引用了FROM 字句中的表。

WITH [CASCADED | LOCAL] CHECK OPTION 決定了是否允許更新資料使記錄不再滿足檢視的條件。這個選項與Oracle 資料庫中的選項是類似的,其中:

  • LOCAL 是隻要滿足本檢視的條件就可以更新;
  • CASCADED 則是必須滿足所有針對該檢視的所有檢視的條件才可以更新。

如果沒有明確是LOCAL 還是CASCADED,則預設是CASCADED。

刪除檢視

使用者可以一次刪除一個或者多個檢視,前提是必須有該檢視的DROP 許可權。

DROP VIEW [IF EXISTS] view_name [, view_name] ...[RESTRICT | CASCADE]

檢視檢視

從MySQL 5.1 版本開始,使用SHOW TABLES 命令的時候不僅顯示錶的名字,同時也會顯示檢視的名字,而不存在單獨顯示檢視的SHOW VIEWS 命令。

同樣,在使用SHOW TABLE STATUS 命令的時候,不但可以顯示錶的資訊,同時也可以顯示檢視的資訊。所以,可以通過下面的命令顯示檢視的資訊:

SHOW TABLE STATUS [FROM db_name] [LIKE 'pattern']

如果需要查詢某個檢視的定義,可以使用SHOW CREATE VIEW 命令進行檢視。

最後,通過檢視系統表information_schema.views 也可以檢視檢視的相關資訊。

參考自:《深入淺出MySQL:資料庫開發、優化與管理維護(第2版)》