24.31 INFORMATION_SCHEMA VIEWStable

VIEWStable 提供有关数据库中的视图的信息。您必须具有SHOW VIEW特权才能访问此 table。

VIEWStable 具有以下列:

  • TABLE_CATALOG

该视图所属的目录的名称。此值始终为def

  • TABLE_SCHEMA

视图所属的架构(数据库)的名称。

  • TABLE_NAME

视图的名称。

  • VIEW_DEFINITION

提供视图定义的SELECT语句。此列包含您在显示创建视图生成的Create Table列中看到的大部分内容。跳过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属性的值。该值为NONECASCADELOCAL之一。

  • IS_UPDATABLE

MySQL 在CREATE VIEW时间设置一个标志,称为视图可更新性标志。如果UPDATEDELETE(及类似操作)对该视图合法,则将标志设置为YES(真)。否则,该标志设置为NO(假)。 VIEWStable 中的IS_UPDATABLE列显示此标志的状态。

如果视图不可更新,则UPDATEDELETEINSERT之类的语句是非法的,将被拒绝。 (即使视图是可更新的,也可能无法插入其中;有关详细信息,请参考第 23.5.3 节“可更新和可插入的视图”。)

如果一个视图依赖一个或多个其他视图,并且这些基础视图之一已更新,则IS_UPDATABLE标志可能不可靠。无论IS_UPDATABLE值如何,服务器都会跟踪视图的可更新性,并正确拒绝对不可更新的视图的数据更改操作。如果由于基础视图的更改而导致视图的IS_UPDATABLE值变得不准确,则可以通过删除并重新创建视图来更新该值。

  • DEFINER

创建视图的用户的帐户,格式为'user_name'@'host_name'

  • SECURITY_TYPE

视图SQL SECURITYFeature。该值为DEFINERINVOKER之一。

  • CHARACTER_SET_CLIENT

创建视图时,character_set_client系统变量的会话值。

  • COLLATION_CONNECTION

创建视图时,collation_connection系统变量的会话值。

Notes

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之前的 Comments 从定义中删除。