该 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_UPDATABLEMySQL 在
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 之前的注释。