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 s1CHECK_OPTIONCHECK_OPTION屬性的值。該值為NONE、CASCADE或LOCAL其中之一。IS_UPDATABLEMySQL 在
CREATE VIEW時設定一個旗標,稱為檢視表可更新性旗標。如果檢視表允許UPDATE和DELETE(以及類似操作),則該旗標會設定為YES(true)。否則,該旗標會設定為NO(false)。VIEWS表格中的IS_UPDATABLE欄位會顯示此旗標的狀態。這表示伺服器始終知道檢視表是否可更新。如果檢視表不可更新,則
UPDATE、DELETE和INSERT等陳述式皆為非法,並且會被拒絕。(即使檢視表可更新,也可能無法插入資料;詳細資訊請參閱第 27.6.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 之前的註解。