VIEWS
表提供有关数据库中视图的信息。您必须具有 SHOW VIEW
权限才能访问此表。
VIEWS
表包含以下列
TABLE_CATALOG
视图所属的目录的名称。此值始终为
def
。TABLE_SCHEMA
视图所属的架构(数据库)的名称。
TABLE_NAME
视图的名称。
VIEW_DEFINITION
提供视图定义的
SELECT
语句。此列包含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
时设置一个标志,称为视图可更新标志。如果UPDATE
和DELETE
(以及类似操作)对视图合法,则该标志设置为YES
(真)。否则,该标志设置为NO
(假)。VIEWS
表中的IS_UPDATABLE
列显示此标志的状态。这意味着服务器始终知道视图是否可更新。如果视图不可更新,则
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
之前的注释。