该 VIEWS
表提供了数据库中的视图信息。您必须拥有 SHOW VIEW
权限以访问该表。
该 VIEWS
表具有以下列:
-
TABLE_CATALOG
该视图所属的目录名称。该值始终为
def
。 -
TABLE_SCHEMA
该视图所属的数据库名称。
-
TABLE_NAME
该视图的名称。
-
VIEW_DEFINITION
该视图的定义语句,类似于
SELECT
语句。该列包含了Create Table
列中大部分内容,该列来自SHOW CREATE VIEW
语句。跳过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
时设置了一个标志,即视图可更新标志。该标志设置为YES
(true),如果UPDATE
和DELETE
(以及类似操作)对视图是合法的。否则,该标志设置为NO
(false)。该IS_UPDATABLE
列在VIEWS
表中显示该标志的状态。这意味着服务器总是知道视图是否可更新。如果视图不可更新,则语句如
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
之前的注释。