MySQL 8.4 發行說明
SHOW CREATE VIEW view_name
此陳述式會顯示建立指定檢視的 CREATE VIEW
陳述式。
mysql> SHOW CREATE VIEW v\G
*************************** 1. row ***************************
View: v
Create View: CREATE ALGORITHM=UNDEFINED
DEFINER=`bob`@`localhost`
SQL SECURITY DEFINER VIEW
`v` AS select 1 AS `a`,2 AS `b`
character_set_client: utf8mb4
collation_connection: utf8mb4_0900_ai_ci
character_set_client
是建立檢視時 character_set_client
系統變數的工作階段值。collation_connection
是建立檢視時 collation_connection
系統變數的工作階段值。
使用 SHOW CREATE VIEW
需要 SHOW VIEW
權限,以及針對相關檢視表的 SELECT
權限。
檢視表資訊也可以從 INFORMATION_SCHEMA
的 VIEWS
資料表中取得。請參閱 第 28.3.47 節,「The INFORMATION_SCHEMA VIEWS Table」。
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.01 sec)
mysql> SHOW CREATE VIEW test.v\G
*************************** 1. row ***************************
View: v
Create View: CREATE VIEW "v" AS select concat('a','b') AS "col1"
...
1 row in set (0.00 sec)
以規範形式儲存檢視表定義的優點是,之後對 sql_mode
值所做的變更不會影響檢視表的結果。然而,一個額外的後果是,伺服器會從定義中移除 SELECT
之前的註解。