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
属性的值。该值为NONE
,CASCADE
或LOCAL
之一。
IS_UPDATABLE
MySQL 在CREATE VIEW时间设置一个标志,称为视图可更新性标志。如果UPDATE和DELETE(及类似操作)对该视图合法,则将标志设置为YES
(真)。否则,该标志设置为NO
(假)。 VIEWStable 中的IS_UPDATABLE
列显示此标志的状态。
如果视图不可更新,则UPDATE,DELETE和INSERT之类的语句是非法的,将被拒绝。 (即使视图是可更新的,也可能无法插入其中;有关详细信息,请参考第 23.5.3 节“可更新和可插入的视图”。)
如果一个视图依赖一个或多个其他视图,并且这些基础视图之一已更新,则IS_UPDATABLE
标志可能不可靠。无论IS_UPDATABLE
值如何,服务器都会跟踪视图的可更新性,并正确拒绝对不可更新的视图的数据更改操作。如果由于基础视图的更改而导致视图的IS_UPDATABLE
值变得不准确,则可以通过删除并重新创建视图来更新该值。
DEFINER
创建视图的用户的帐户,格式为'user_name'@'host_name'
。
SECURITY_TYPE
视图SQL SECURITY
Feature。该值为DEFINER
或INVOKER
之一。
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 从定义中删除。