什么是 information_schema
informationschema 提供了对数据库元数据、统计信息以及有关 MySQL Server 信息的访问(例如:数据库名或表名、字段的数据类型和访问权限等)。 该库中保存的信息也可以称为 MySQL 的数据字典或系统目录。
在每个MySQL 实例中都有一个独立的information_schema,用来存储MySQL 实例中所有其他数据库的基本信息。 information_schema 库下包含多个只读表(非 持久表),所以在磁盘中的数据目录下没有对应的关联文件,且不能对这些表设 置触发器。虽然在查询时可以使用 USE 语句将默认数据库设置为 information_schema,但该库下的所有表是只读的,不能执行 INSERT、UPDATE、 DELETE 等数据变更操作。
针对 information_schema 下的表的查询操作可以替代一些 SHOW 查询语句 (例如:SHOW DATABASES、SHOW TABLES 等)。
注意:根据 MySQL 版本的不同,表的个数和存放是有所不同的。在 MySQL 5.6 版本中总共有 59 个表,在 MySQL 5.7 版本中,该 schema 下总共有 61 个表, 在 MySQL 8.0 版本中,该 schema 下的数据字典表(包含部分原 Memory 引 擎临时表)都迁移到了 mysql schema 下,且在 mysql schema 下这些数据字典表 被隐藏,无法直接访问,需要通过 informationschema 下的同名表进行访问。
information_schema 下的所有表使用的都是 Memory 和 InnoDB 存储引擎, 且都是临时表,不是持久表,在数据库重启之后这些数据会丢失。在 MySQL 的 4 个系统库中,information_schema 也是唯一一个在文件系统上没有对应库表的目录和文件的系统库。