VIEWS
表格提供資料庫中視圖的相關資訊。您必須擁有 SHOW VIEW
權限才能存取此表格。
VIEWS
表格具有以下欄位:
TABLE_CATALOG
視圖所屬的目錄名稱。此值永遠為
def
。TABLE_SCHEMA
視圖所屬的綱要(資料庫)名稱。
TABLE_NAME
視圖的名稱。
VIEW_DEFINITION
提供視圖定義的
SELECT
陳述式。此欄位包含您在SHOW CREATE VIEW
產生的Create Table
欄位中看到的大部分內容。略過SELECT
前的文字,並略過WITH CHECK OPTION
文字。假設原始陳述式為:CREATE VIEW v AS SELECT s2,s1 FROM t WHERE s1 > 5 ORDER BY s1 WITH CHECK OPTION;
那麼視圖定義如下所示:
SELECT s2,s1 FROM t WHERE s1 > 5 ORDER BY s1
CHECK_OPTION
CHECK_OPTION
屬性的值。該值為NONE
、CASCADE
或LOCAL
其中之一。IS_UPDATABLE
MySQL 會在
CREATE VIEW
時設定一個稱為視圖可更新性的旗標。如果UPDATE
和DELETE
(以及類似的操作)對於視圖是合法的,則該旗標設定為YES
(true)。否則,該旗標設定為NO
(false)。VIEWS
表格中的IS_UPDATABLE
欄位會顯示此旗標的狀態。這表示伺服器始終知道視圖是否可更新。如果視圖不可更新,則諸如
UPDATE
、DELETE
和INSERT
之類的陳述式是非法的,並且會被拒絕。(即使視圖是可更新的,也可能無法插入到其中;有關詳細資訊,請參閱第 27.5.3 節,「可更新和可插入的視圖」。)DEFINER
建立視圖的使用者帳戶,格式為
'
。user_name
'@'host_name
'SECURITY_TYPE
視圖
SQL SECURITY
特性。該值為DEFINER
或INVOKER
其中之一。CHARACTER_SET_CLIENT
建立視圖時
character_set_client
系統變數的會話值。COLLATION_CONNECTION
建立視圖時
collation_connection
系統變數的會話值。
注意事項
MySQL 允許使用不同的 sql_mode
設定,以告知伺服器要支援哪種 SQL 語法。例如,您可以使用 ANSI
SQL 模式,以確保 MySQL 正確解譯查詢中的標準 SQL 連接運算子,即雙豎線 (||
)。如果您隨後建立一個連接項目的視圖,您可能會擔心將 sql_mode
設定變更為與 ANSI
不同的值可能會導致視圖失效。但事實並非如此。無論您如何編寫視圖定義,MySQL 始終會以相同的標準形式儲存它。以下範例說明伺服器如何將雙豎線連接運算子變更為 CONCAT()
函數:
mysql> SET sql_mode = 'ANSI';
Query OK, 0 rows affected (0.00 sec)
mysql> CREATE VIEW test.v AS SELECT 'a' || 'b' as col1;
Query OK, 0 rows affected (0.00 sec)
mysql> SELECT VIEW_DEFINITION FROM INFORMATION_SCHEMA.VIEWS
WHERE TABLE_SCHEMA = 'test' AND TABLE_NAME = 'v';
+----------------------------------+
| VIEW_DEFINITION |
+----------------------------------+
| select concat('a','b') AS `col1` |
+----------------------------------+
1 row in set (0.00 sec)
以標準形式儲存視圖定義的優點是,稍後對 sql_mode
值所做的變更不會影響視圖的結果。但是,另一個後果是伺服器會從定義中移除 SELECT
前的註解。