该VIEWS表提供有关数据库中视图的信息。您必须有权
SHOW VIEW访问此表。
该VIEWS表有以下列:
TABLE_CATALOG视图所属目录的名称。该值始终为
def.TABLE_SCHEMA视图所属的模式(数据库)的名称。
TABLE_NAME视图的名称。
VIEW_DEFINITIONSELECT提供视图定义的语句 。该专栏包含您在生成的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 s1CHECK_OPTION属性的值
CHECK_OPTION。该值为NONE、CASCADE或之一LOCAL。IS_UPDATABLEMySQL 会设置一个标志,称为视图可更新性标志
CREATE VIEW。如果和 (以及类似操作)对于视图是合法的,则该标志设置为YES(true) 。否则,标志设置为 (false)。表中的 列 显示此标志的状态。UPDATEDELETENOIS_UPDATABLEVIEWS如果视图不可更新,则 、 和 等语句
UPDATE是DELETE非法INSERT的并被拒绝。(即使视图是可更新的,也可能无法插入其中;有关详细信息,请参阅 第 23.5.3 节,“可更新和可插入的视图”。)如果一个视图依赖于一个或多个其他视图,并且这些基础视图之一已更新,则该
IS_UPDATABLE标志可能不可靠。无论IS_UPDATABLE值如何,服务器都会跟踪视图的可更新性并正确拒绝对不可更新的视图的数据更改操作。如果视图的IS_UPDATABLE值由于基础视图的更改而变得不准确,则可以通过删除并重新创建视图来更新该值。DEFINER创建视图的用户的帐户, 格式为。
'user_name'@'host_name'SECURITY_TYPE景观
SQL SECURITY特色。值为DEFINER或 之一INVOKER。CHARACTER_SET_CLIENTcharacter_set_client创建视图时系统变量 的会话值 。COLLATION_CONNECTIONcollation_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被服务器从定义中删除。