目录
INFORMATION_SCHEMA提供对数据库 元数据、有关 MySQL 服务器的信息(例如数据库或表的名称、列的数据类型或访问权限)的访问。有时用于此信息的其他术语是 数据字典和 系统目录。
28.1 简介
INFORMATION_SCHEMA提供对数据库 元数据、有关 MySQL 服务器的信息(例如数据库或表的名称、列的数据类型或访问权限)的访问。有时用于此信息的其他术语是 数据字典和 系统目录。
- INFORMATION_SCHEMA 使用说明
- 字符集注意事项
- INFORMATION_SCHEMA 作为 SHOW 语句的替代方案
- INFORMATION_SCHEMA 和权限
- 性能考虑因素
- 标准考虑因素
- INFORMATION_SCHEMA 参考部分中的约定
- 相关信息
INFORMATION_SCHEMA 使用说明
INFORMATION_SCHEMA是每个 MySQL 实例中的一个数据库,用于存储有关 MySQL 服务器维护的所有其他数据库的信息。该 INFORMATION_SCHEMA数据库包含多个只读表。它们实际上是视图,而不是基表,因此没有与它们关联的文件,并且您无法在它们上设置触发器。此外,没有具有该名称的数据库目录。
虽然您可以INFORMATION_SCHEMA通过语句选择作为默认数据库USE ,但您只能读取表的内容,而不能 对其 执行INSERT、 UPDATE、 或 操作。DELETE
以下是从 检索信息的语句示例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从 MySQL 8.0.30 开始,默认情况下,有关生成的不可见主键的信息在描述表列、键或两者的所有表(例如 COLUMNS和 表 )中可见 STATISTICS。如果您希望对从这些表中选择的查询隐藏此类信息,可以通过将show_gipk_in_create_table_and_information_schema 服务器系统变量的值设置为 来实现 OFF。有关更多信息,请参阅第 15.1.20.11 节 “生成的不可见主键”。
字符集注意事项
字符列(例如 TABLES.TABLE_NAME)的定义通常 至少为 64。MySQL 使用此字符集的默认排序规则 ( )来对此类列进行所有搜索、排序、比较和其他字符串操作。 VARCHAR(*N*) CHARACTER SET utf8mb3Nutf8mb3_general_ci
由于某些 MySQL 对象表示为文件,因此 INFORMATION_SCHEMA字符串列中的搜索可能会受到文件系统区分大小写的影响。有关更多信息,请参阅第 12.8.7 节 “在 INFORMATION_SCHEMA 搜索中使用排序规则”。
INFORMATION_SCHEMA 作为 SHOW 语句的替代方案
该SELECT ... FROM INFORMATION_SCHEMA 语句旨在提供一种更一致的方式来访问 SHOWMySQL 支持的各种语句(SHOW DATABASES、 SHOW TABLES等)所提供的信息。SELECT与 相比,使用 具有以下优点SHOW:
- 它符合 Codd 规则,因为所有访问都是在表上完成的。
- 您可以使用熟悉的语句语法
SELECT,只需要了解一些表名和列名。 - 实现者不必担心添加关键字。
- 您可以对查询结果进行过滤、排序、连接并将其转换
INFORMATION_SCHEMA为应用程序所需的任何格式,例如要解析的数据结构或文本表示形式。 - 该技术与其他数据库系统的互操作性更强。例如,Oracle 数据库用户熟悉查询 Oracle 数据字典中的表。
由于SHOW熟悉且广泛使用,这些SHOW语句仍然作为替代。事实上,随着 的实现INFORMATION_SCHEMA,还有第 28.8 节“SHOW 语句的扩展”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 部分架构。我们的目的是大致符合 SQL:2003 核心功能 F021 基本信息模式。
SQL Server 2000(也遵循该标准)的用户可能会注意到强烈的相似性。然而,MySQL 省略了许多与我们的实现无关的列,并添加了 MySQL 特定的列。这样添加的列之一就是 表ENGINE中的列 INFORMATION_SCHEMA TABLES。
尽管其他 DBMS 使用各种名称,例如 syscat或system,但标准名称是INFORMATION_SCHEMA。
为了避免使用标准或 DB2、SQL Server 或 Oracle 中保留的任何名称,我们更改了一些标记为“ MySQL 扩展” 的列的名称。 (例如,我们 在表中 更改COLLATION为 。)请参阅本文末尾附近的保留字列表: https://web.archive.org/web/20070428032454/http 😕/www.dbazine.com/db2 /db2-disarticles/gulutzan5。 TABLE_COLLATIONTABLES
INFORMATION_SCHEMA 参考部分中的约定
以下部分描述了 中的每个表和列INFORMATION_SCHEMA。每列包含三条信息:
- “
INFORMATION_SCHEMA名称” 表示表中列的名称INFORMATION_SCHEMA。这对应于标准 SQL 名称,除非 “备注”字段显示“ MySQL 扩展名”。 ” - “
SHOWName ” 表示最接近的语句中的等效字段名称(SHOW如果有)。 - “备注”提供适用的附加信息。如果该字段为
NULL,则表示该列的值始终为NULL。如果此字段显示“ MySQL 扩展” ,则该列是标准 SQL 的 MySQL 扩展。
许多部分指示什么SHOW 语句相当于 SELECT从 检索信息的a INFORMATION_SCHEMA。对于 SHOW在省略子句的情况下显示默认数据库信息的语句,通常可以通过向从表中检索信息的查询的子句添加条件 来选择默认数据库的信息 。 FROM *db_name*``AND TABLE_SCHEMA = SCHEMA()``WHERE``INFORMATION_SCHEMA
相关信息
这些部分讨论其他 INFORMATION_SCHEMA相关主题:
- 有关
INFORMATION_SCHEMA特定于InnoDB存储引擎的表的信息: 第 28.4 节,“INFORMATION_SCHEMA InnoDB 表” - 有关
INFORMATION_SCHEMA特定于线程池插件的表的信息: 第 28.5 节,“INFORMATION_SCHEMA 线程池表” - 有关
INFORMATION_SCHEMA特定于CONNECTION_CONTROL插件的表的信息: 第 28.6 节,“INFORMATION_SCHEMA 连接控制表” - 有关数据库的常见问题解答
INFORMATION_SCHEMA: 第 A.7 节“MySQL 8.0 常见问题解答:INFORMATION_SCHEMA” INFORMATION_SCHEMA查询和优化器:第 10.2.3 节,“优化 INFORMATION_SCHEMA 查询”- 排序规则对比较的影响
INFORMATION_SCHEMA: 第 12.8.7 节,“在 INFORMATION_SCHEMA 搜索中使用排序规则”




