28.3.47 INFORMATION_SCHEMA 视图表
视图表VIEWS提供了关于数据库中的视图的信息。您必须拥有SHOW VIEW特权才能访问该表。
视图表VIEWS具有以下列:
-
TABLE_ Catalog视图所属的目录名称。这一值始终是
def。 -
TABLE_SCHEMA视图所属的架构(数据库)名称。
-
TABLE_NAME视图名称。
-
VIEW_DEFINITION提供视图定义的
SELECT语句。这一列包含了SHOW CREATE VIEW生成的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_OPTIONCHECK_OPTION 属性的值。该值是
NONE、CASCADE或LOCAL之一。 -
IS_UPDATABLEMySQL 在创建视图时设置一个标志,称为视图可更新标志。如果对视图执行
UPDATE、DELETE等操作是合法的,该标志设置为YES(true)。否则,该标志设置为NO(false)。IS_UPDATABLE列在VIEWS表中显示该标志的状态。这意味着服务器总是知道一个视图是否可更新。如果一个视图不可更新,语句如
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_模式设置来告诉服务器支持的 SQL 语法类型。例如,您可能使用ANSI SQL 模式来确保 MySQL 正确地解释标准 SQL 连接操作符,双竖线 (||),在您的查询中。如果您然后创建一个连接项的视图,您可能担心将sql_模式设置更改为与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_模式值的更改不会影响视图的结果。然而,这也意味着服务器将从定义中删除前置的注释。