该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) 。否则,标志设置为 (false)。表中的 列 显示此标志的状态。UPDATE
DELETE
NO
IS_UPDATABLE
VIEWS
如果视图不可更新,则 、 和 等语句
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_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
被服务器从定义中删除。