文档主页
MySQL 9.0 参考手册
相关文档 下载本手册
PDF (US Ltr) - 40.0Mb
PDF (A4) - 40.1Mb
手册页 (TGZ) - 258.2Kb
手册页 (Zip) - 365.3Kb
信息 (Gzip) - 4.0Mb
信息 (Zip) - 4.0Mb


28.1 简介

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

INFORMATION_SCHEMA 使用说明

INFORMATION_SCHEMA 是每个 MySQL 实例中的一个数据库,用于存储有关 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 等)所提供信息的访问。与 SHOW 相比,使用 SELECT 具有以下优点:

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

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

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

  • 您可以将 INFORMATION_SCHEMA 查询的结果过滤、排序、连接和转换为应用程序所需的任何格式,例如数据结构或要解析的文本表示形式。

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

由于 SHOW 语句为人们所熟悉并广泛使用,因此 SHOW 语句仍然可以作为一种替代方法。事实上,除了实现 INFORMATION_SCHEMA 之外,SHOW 语句还进行了增强,如 第 28.8 节 “SHOW 语句的扩展” 中所述。

INFORMATION_SCHEMA 和权限

对于大多数 INFORMATION_SCHEMA 表,每个 MySQL 用户都有权访问它们,但只能看到表中与该用户具有适当访问权限的对象相对应的行。在某些情况下(例如,INFORMATION_SCHEMA ROUTINES 表中的 ROUTINE_DEFINITION 列),权限不足的用户会看到 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 部分 模式。我们的目标是近似符合 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 表中列的名称。这对应于标准 SQL 名称,除非 备注 字段显示为 MySQL 扩展。

  • SHOW 名称 指示最接近的 SHOW 语句中的等效字段名称(如果有)。

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

许多章节指出了哪个 SHOW 语句等效于从 INFORMATION_SCHEMA 检索信息的 SELECT。对于在省略 FROM db_name 子句时显示默认数据库信息的 SHOW 语句,您通常可以通过在从 INFORMATION_SCHEMA 表检索信息的查询的 WHERE 子句中添加 AND TABLE_SCHEMA = SCHEMA() 条件来选择默认数据库的信息。

相关信息

以下章节讨论了其他与 INFORMATION_SCHEMA 相关的主题