Skip to content
xiaoboluo768 edited this page Jun 7, 2020 · 2 revisions
  • 该表提供查询数据库中的视图相关的信息,查询该表的帐号需要拥有show view权限
  • 该表为InnoDB引擎临时表
  • 表定义语句
CREATE TEMPORARY TABLE `VIEWS` (
  `TABLE_CATALOG` varchar(512) NOT NULL DEFAULT '',
  `TABLE_SCHEMA` varchar(64) NOT NULL DEFAULT '',
  `TABLE_NAME` varchar(64) NOT NULL DEFAULT '',
  `VIEW_DEFINITION` longtext NOT NULL,
  `CHECK_OPTION` varchar(8) NOT NULL DEFAULT '',
  `IS_UPDATABLE` varchar(3) NOT NULL DEFAULT '',
  `DEFINER` varchar(93) NOT NULL DEFAULT '',
  `SECURITY_TYPE` varchar(7) NOT NULL DEFAULT '',
  `CHARACTER_SET_CLIENT` varchar(32) NOT NULL DEFAULT '',
  `COLLATION_CONNECTION` varchar(32) NOT NULL DEFAULT ''
) ENGINE=InnoDB DEFAULT CHARSET=utf8 
  • 表字段含义
  • TABLE_CATALOG:该字段总是为def
  • TABLE_SCHEMA:表示视图所在的数据库名称
  • TABLE_NAME:表示视图名称
  • VIEW_DEFINITION:表示视图的定义语句SQL文本,注意,该文本经过了内部转换,并不是原始的定义语句,该列显示的内容与使用SHOW CREATE VIEW语句查看到的视图定义语句信息大部分相同(小部分不同的是,information_schema.views表中会自动去掉例如"WITH CHECK OPTION"的关键字,而show create view语句查询出来的信息中不会删除"WITH CHECK OPTION"关键字)
  • CHECK_OPTION:创建视图时的CHECK OPTION选项值,有效值为:NONE、CASCADED、LOCAL
  • IS_UPDATABLE:在创建视图时,MySQL会为视图设置一个是否可更新的标记,如果视图可执行DML语句(以及类似的操作),则该字段值为YES,否则为NO。
* 如果视图不可被更新,则执行DML语句时会报错 * 如果视图依赖于一个或多个其他视图,则IS_UPDATABLE标记在此场景下不可靠,在这种情况下,被依赖的基础视图中的某一个被更新,IS_UPDATABLE列的值并不会更新,但可以通过删除和重新创建视图来更新该值
  • DEFINER:创建视图的账户名称
  • SECURITY_TYPE:表示视图以谁的身份来执行,有效值为:DEFINER(表示以定义者的身份来执行)、INVOKER(表示调用者的身份来执行)
  • CHARACTER_SET_CLIENT:表示创建视图时character_set_client系统变量的会话值
  • COLLATION_CONNECTION:创建视图时collation_connection系统变量的会话值
  • PS:MySQL可以使用不同的sql_mode的设置值来使server支持不同的SQL语法类型。例如:当使用"ANSI"值时,双竖杠"||" 被当作连接运算符(字符串拼接符)解析。在MySQL内部会把双竖杠"||" 转换为concat()函数对待,但在MySQL 5.7的默认sql_mode值下,双竖杠"||" 被解析为逻辑或关键字or。
  • 表记录内容示例
admin@localhost : information_schema 06:22:17> select * from VIEWS where TABLE_SCHEMA='sys' limit 1\G;
*************************** 1. row ***************************
      TABLE_CATALOG: def
        TABLE_SCHEMA: sys
          TABLE_NAME: host_summary
    VIEW_DEFINITION: select if(isnull(`performance_schema`.`accounts`.`HOST`),'background',`performance_schema`.`accounts`.`HOST`) AS `host`,sum(`stmt`.`total`) AS \
`statements`,`sys`.`format_time`(sum(`stmt`.`total_latency`)) AS `statement_latency`,`sys`.`format_time`(ifnull((sum(`stmt`.`total_latency`) / nullif(sum(`stmt`.`total`),0)),0)) AS \
`statement_avg_latency`,sum(`stmt`.`full_scans`) AS `table_scans`,sum(`io`.`ios`) AS `file_ios`,`sys`.`format_time`(sum(`io`.`io_latency`)) AS \
`file_io_latency`,sum(`performance_schema`.`accounts`.`CURRENT_CONNECTIONS`) AS `current_connections`,sum(`performance_schema`.`accounts`.`TOTAL_CONNECTIONS`) \
AS `total_connections`,count(distinct `performance_schema`.`accounts`.`USER`) AS `unique_users`,`sys`.`format_bytes`(sum(`mem`.`current_allocated`)) AS \
`current_memory`,`sys`.`format_bytes`(sum(`mem`.`total_allocated`)) AS `total_memory_allocated` from (((`performance_schema`.`accounts` join `sys`.`x$host_summary_by_statement_latency` `stmt` \
on((`performance_schema`.`accounts`.`HOST` = `stmt`.`host`))) join `sys`.`x$host_summary_by_file_io` `io` on((`performance_schema`.`accounts`.`HOST` = `io`.`host`))) join\
`sys`.`x$memory_by_host_by_current_bytes` `mem` on((`performance_schema`.`accounts`.`HOST` = `mem`.`host`))) group by \
if(isnull(`performance_schema`.`accounts`.`HOST`),'background',`performance_schema`.`accounts`.`HOST`)
        CHECK_OPTION: NONE
        IS_UPDATABLE: NO
            DEFINER: mysql.sys@localhost
      SECURITY_TYPE: INVOKER
CHARACTER_SET_CLIENT: utf8
COLLATION_CONNECTION: utf8_general_ci
1 row in set (0.02 sec)

上一篇:USER_PRIVILEGES表 |下一篇:INNODB_LOCKS表

Clone this wiki locally