【MySQL学生手册】INFORMATION_SCHEMA数据库

来源:互联网 时间:1970-01-01

本文地址: http://t.dbdao.com/archives/mysql-information-schema.html

dbDao 百度贴吧:http://tieba.baidu.com/dbdao

Mysql技术学习QQ群:146959374

INFORMATION_SCHEMA数据库作为MySQL数据库元数据的一个中央集中仓库存在。它是一个“虚拟的数据库”,因为它不存放在磁盘任何位置。但它和其他数据库一样含有表,且表中的内容可以通过使用select语句和其它数据库一样查询访问。此外,你还可以使用select来获取关于INFORMATION_SCHEMA其本身的信息,如可以使用以下语句来列出此数据库下所有的表名:

注意:随着所MySQL所使用的版本不同,查询结果可能有所差异,更多详细信息请查阅最新版本的在线MySQL参考手册。【dbdao.com 数据岛】

INFORMATION_SCHEMA 下的表

在INFORMATION_SCHEMA数据库中,这些表包含了以下类别的信息:

CHARACTER_SETS — 关于字符集信息 COLLATIONS — 关于每个字符集的(排序)规则信息 COLLATION_CHARACTER_SET_APPLICABILITY — 关于字符集和每种(排序)规则的对应关系信息 COLUMNS — 关于表中的列信息 COLUMN_PRIVILEGES — 关于MySQL对应账号所有列权限信息 ENGINES — 关于存储引擎的信息 EVENTS — 关于计划事件信息 FILES — 从7.8版本(未使用MySQL Cluster版本的情况下)开始,此表会显示关于InnoDB数据文件信息。早前的版本中此表都显示的是关于NDB数据文件的存储信息。 GLOBAL_STATUS — 关于服务端状态信息,7.6版本之后此表开始将被存放在PERFORMANCE_SCHEMA数据库中 GLOBAL_VARIABLES — 关于服务端全局变量信息,7.6版本之后此表开始将被存放在PERFORMANCE_SCHEMA数据库中 KEY_COLUMN_USAGE — 关于含有约束的键值列信息 OPTIMIZER_TRACE — 关于内部优化器执行语句的追踪信息,启用相应追踪功能需要启动设置optimizer_trace变量 PARAMETERS — 提供关于存储过程和功能函数所使用的参数及功能函数返回值信息 PLUGINS — 关于服务端插件信息 PROCESSLIST — 关于正在运行的线程信息 REFERENTIAL_CONSTRAINTS — 关于外键信息 ROUTINES — 关于存储过程和功能函数的相关信息 SCHEMATA — 关于数据库的信息 SCHEMA_PRIVILEGES — 关于MySQL用户账号所有的数据库权限 SESSION_STATUS — 关于当前连接的状态信息,7.6版本之后此表开始将被存放在PERFORMANCE_SCHEMA数据库中 SESSION_VARIABLES — 关于当前连接的会话变量信息,7.6版本之后此表开始将被存放在PERFORMANCE_SCHEMA数据库中 STATISTICS – 关于表索引的统计信息 TABLES — 关于数据库中表的信息 TABLESPACES — 提供了活动的表空间的信息,注意此表不提供关于InnoDB表空间的元数据信息,你需要去INNODB_SYS_TABLESPACES和INNODB_SYS_DATAFILES下查看,当然MySQL 5.7.8以后,FILES表也提供了InnoDB表空间相关的元数据信息。 TABLE_CONSTRAINTS — 关于表上的约束信息 TABLE_PRIVILEGES — 关于由MySQL用户账号所有的对应表权限信息 TRIGGERS — 关于数据库中触发器信息 USER_PRIVILEGES — 关于MySQL用户账号所有的全局性的权限信息 VIEWS — 关于数据库中视图信息 INNODB_XXXX表 — 这些表被用于监控正在进行的InnoDB活动,可以用于在出现问题前探测到这些低效的性能及承载问题。

INFORMATION_SCHEMA 表的查看

为了显示INFORMATION_SCHEMA的表中的列名信息,你可以使用以下查询语句,在table_name中指定你需要查看的表:

对于INFORMATION_SCHEMA数据库的库名,它下面表的表名,以及列名 都不是大小写敏感 的,因此,如果查询语句如下:

mysql> select column_name from information_schema.columns -> where table_schema='information_schema' -> and table_name='views';

其结果和上图是一样的。【dbdao.com 数据岛】

当你通过使用select语句从information_schema库中获取元数据,你就可以利用到select语句所能使用的特性:

限定你需要获取的列 使用where条件语法来限定哪些行信息是你需要的 可以使用group by或order by对结果集进行分组排序 可以使用表连接,合并及子查询。 你可以通过对INFORMATION_SCHEMA库表的查询语句,将其和create table … select或insert … select一起使用。这样可以保存结果集,并在之后用于其他语句的使用。

以下示例展示了如何使用各种select语句来从information_schema库中拉取相应信息:

显示world数据库中的表所使用的存储引擎 找到所有包含数据类型SET的列的表: 显示每个字符集和默认排序规则: 显示每个数据库中表的数量:

information_schema是只读的,其中的表不能被insert, delete或update语句所修改。如果这样做,会报错并中止执行:

mysql> DELETE FROM INFORMATION_SCHEMA.VIEWS;ERROR 1288 (HY000): The target table VIEWS of the DELETE is not updatable

以下为在现实工作中,你可能会用到information_schema的例子:

查看每个数据库数据所占的大小: 查看用户账号及其权限(确保每个用户都设置有密码) 对每张表中的某种数据类型做一个统计

by 汪伟华,dbdao.com 数据岛

dbDao.com 引导式IT在线教育

dbDao 百度贴吧:http://tieba.baidu.com/dbdao

扫码关注dbDao 微信公众号:


相关阅读:
Top