MySQL 8.4 Release Notes
15.7.7.14 显示创建视图语句
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节,“INFORMATION_SCHEMA VIEWS 表”。
MySQL 允许您使用不同的sql_mode
设置来告诉服务器支持的 SQL 语法类型。例如,您可能使用ANSI
SQL 模式,以确保 MySQL 正确地解释标准 SQL 连接操作符,双竖线 (||
),在您的查询中。如果您然后创建一个连接操作符的视图,您可能会担心更改sql_mode
设置到值不同于ANSI
的可能会使视图无效。但是,这不是情况。无论您如何编写视图定义,MySQL 都会将其存储为同一形式,canonical form。以下是一个示例,展示了服务器如何将双竖线连接操作符更改为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)
canonical form 存储视图定义的优点是,您可以在更改sql_mode
值时,不会影响来自视图的结果。然而,另一个结果是,服务器将删除SELECT
之前的注释。