Documentation Home
MySQL 8.3 Reference Manual
Related Documentation Download this Manual
PDF (US Ltr) - 40.8Mb
PDF (A4) - 40.9Mb
Man Pages (TGZ) - 294.0Kb
Man Pages (Zip) - 409.0Kb
Info (Gzip) - 4.0Mb
Info (Zip) - 4.0Mb
Excerpts from this Manual

28.1 简介

INFORMATION_SCHEMA 提供了数据库 元数据 的访问,包括 MySQL 服务器的信息,如数据库或表的名称、列的数据类型或访问权限。其他术语有时用于描述这些信息是 数据字典系统目录

INFORMATION_SCHEMA 使用注意事项

INFORMATION_SCHEMA 是 MySQL 实例中的一个数据库,存储着所有其他数据库的信息。 INFORMATION_SCHEMA 数据库包含几个只读表。它们实际上是视图,而不是基本表,因此没有与它们关联的文件,也不能在它们上设置触发器。此外,也没有以该名称命名的数据库目录。

尽管您可以使用 USE 语句将 INFORMATION_SCHEMA 作为默认数据库,但是您只能读取表的内容,而不能执行 INSERTUPDATEDELETE 操作。

以下是一个从 INFORMATION_SCHEMA 中检索信息的示例语句:

mysql> SELECT table_name, table_type, engine
       FROM information_schema.tables
       WHERE table_schema = 'db5'
       ORDER BY table_name;
+------------+------------+--------+
| table_name | table_type | engine |
+------------+------------+--------+
| fk         | BASE TABLE | InnoDB |
| fk2        | BASE TABLE | InnoDB |
| goto       | BASE TABLE | MyISAM |
| into       | BASE TABLE | MyISAM |
| k          | BASE TABLE | MyISAM |
| kurs       | BASE TABLE | MyISAM |
| loop       | BASE TABLE | MyISAM |
| pk         | BASE TABLE | InnoDB |
| t          | BASE TABLE | MyISAM |
| t2         | BASE TABLE | MyISAM |
| t3         | BASE TABLE | MyISAM |
| t7         | BASE TABLE | MyISAM |
| tables     | BASE TABLE | MyISAM |
| v          | VIEW       | NULL   |
| v2         | VIEW       | NULL   |
| v3         | VIEW       | NULL   |
| v56        | VIEW       | NULL   |
+------------+------------+--------+
17 rows in set (0.01 sec)

解释:该语句请求数据库 db5 中的所有表的列表,仅显示三个信息:表的名称、类型和存储引擎。

生成的不可见主键的信息默认情况下在所有 INFORMATION_SCHEMA 表中可见,例如 COLUMNSSTATISTICS 表。如果您想隐藏这些信息,可以将服务器系统变量 show_gipk_in_create_table_and_information_schema 的值设置为 OFF。有关更多信息,请参阅 第 15.1.20.11 节,“生成的不可见主键”

字符集考虑因素

字符列的定义(例如,TABLES.TABLE_NAME)通常是 VARCHAR(N) CHARACTER SET utf8mb3,其中 N 至少为 64。MySQL 使用该字符集的默认排序规则(utf8mb3_general_ci)对这些列进行所有字符串操作,例如搜索、排序、比较等。

因为一些 MySQL 对象被表示为文件,因此在 INFORMATION_SCHEMA 字符串列中搜索可能受到文件系统大小写敏感性的影响。有关更多信息,请参阅 第 12.8.7 节,“在 INFORMATION_SCHEMA 搜索中使用排序”

INFORMATION_SCHEMA 作为 SHOW 语句的替代

SELECT ... FROM INFORMATION_SCHEMA 语句旨在提供一种更一致的方式来访问 MySQL 支持的各种 SHOW 语句提供的信息(例如 SHOW DATABASESSHOW TABLES 等)。使用 SELECT 有以下优点,相比 SHOW

  • 它符合 Codd 的规则,因为所有访问都是在表上进行的。

  • 您可以使用熟悉的 SELECT 语句语法,只需要学习一些表和列名。

  • 实现者不需要担心添加关键字。

  • 您可以过滤、排序、连接和转换 INFORMATION_SCHEMA 查询结果,以满足应用程序的需求,例如数据结构或文本表示形式以供解析。

  • 这种技术与其他数据库系统更加互操作。例如,Oracle Database 用户熟悉查询 Oracle 数据字典中的表。

因为 SHOW 是熟悉的且广泛使用的,因此 SHOW 语句仍然作为替代方案。事实上,随着 INFORMATION_SCHEMA 的实现,还有对 SHOW 的增强,如 第 28.8 节,“SHOW 语句的扩展” 所述。

INFORMATION_SCHEMA 和权限

对于大多数 INFORMATION_SCHEMA 表,每个 MySQL 用户都有权访问它们,但只能看到对应于用户拥有适当访问权限的对象的行。在某些情况下(例如,ROUTINE_DEFINITION 列在 INFORMATION_SCHEMA ROUTINES 表中),用户如果没有足够的权限,将看到 NULL。一些表具有不同的权限要求;对于这些,要求在适用的表描述中提到。例如,InnoDB 表(以 INNODB_ 开头的表)需要 PROCESS 权限。

同样的权限也适用于从 INFORMATION_SCHEMA 选择信息和通过 SHOW 语句查看相同的信息。在这两种情况下,您都需要在对象上拥有某些权限以查看该对象的信息。

性能考虑

INFORMATION_SCHEMA 查询可能会搜索多个数据库中的信息,从而影响性能。要检查查询的效率,可以使用 EXPLAIN。有关使用 EXPLAIN 输出来优化 INFORMATION_SCHEMA 查询的信息,请参阅 第 10.2.3 节,“优化 INFORMATION_SCHEMA 查询”

标准考虑

MySQL 中的 INFORMATION_SCHEMA 表结构实现遵循 ANSI/ISO SQL:2003 标准第 11 部分 Schemata。我们的目标是遵循 SQL:2003 核心功能 F021 基本信息架构

SQL Server 2000 的用户(也遵循该标准)可能会注意到强烈的相似性。然而,MySQL 省略了许多不相关的列,并添加了 MySQL 特定的列。例如,在 INFORMATION_SCHEMA TABLES 表中添加了 ENGINE 列。

尽管其他 DBMS 使用不同的名称,如 syscatsystem,标准名称是 INFORMATION_SCHEMA

为了避免使用任何在标准或 DB2、SQL Server 或 Oracle 中保留的名称,我们更改了某些标记为 MySQL 扩展 的列的名称。(例如,在 TABLES 表中,我们将 COLLATION 更改为 TABLE_COLLATION。)请参阅文章末尾的保留字列表:https://web.archive.org/web/20070428032454/http://www.dbazine.com/db2/db2-disarticles/gulutzan5

INFORMATION_SCHEMA 参考部分约定

以下部分描述了 INFORMATION_SCHEMA 中的每个表和列。对于每个列,有三部分信息:

  • INFORMATION_SCHEMA 名称 表示 INFORMATION_SCHEMA 表中的列名称,除非 备注 字段说 MySQL 扩展。

  • SHOW 名称 表示等效的 SHOW 语句的字段名称,如果存在。

  • 备注 提供了附加信息,适用时。如果该字段为 NULL,则表示该列的值始终为 NULL。如果该字段说 MySQL 扩展, 则该列是 MySQL 对标准 SQL 的扩展。

许多部分指示了哪个 SHOW 语句等效于从 INFORMATION_SCHEMA 中检索信息的 SELECT 语句。对于 SHOW 语句,如果您省略了 FROM db_name 子句,可以通过添加 AND TABLE_SCHEMA = SCHEMA() 条件到 WHERE 子句来检索默认数据库的信息。

相关信息

这些部分讨论了其他 INFORMATION_SCHEMA 相关主题: