• 首页
  • css3教程
  • html5教程
  • jQuery手册
  • vue手册
  • php手册
  • MySQL手册
  • apache手册
  • redis手册
  • INFORMATION_SCHEMA简介

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

    • INFORMATION_SCHEMA使用说明
    • 字符集注意事项
    • INFORMATION_SCHEMA代替SHOW语句
    • INFORMATION_SCHEMA和特权
    • 性能考量
    • 标准注意事项
    • INFORMATION_SCHEMA参考部分中的约定
    • 相关信息

    INFORMATION_SCHEMA使用说明

    INFORMATION_SCHEMA是每个MySQL实例中的一个数据库,该位置存储有关MySQL服务器维护的所有其他数据库的信息。该INFORMATION_SCHEMA数据库包含几个只读表。它们实际上是视图,而不是基表,因此没有与它们关联的文件,并且您不能在它们上设置触发器。另外,没有使用该名称的数据库目录。

    虽然你可以选择INFORMATION_SCHEMA与一个默认的数据库USE语句,你只能读取表的内容,不执行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,仅显示三条信息:表的名称,其类型和存储引擎。

    字符集注意事项

    字符列的定义(例如,TABLES.TABLE_NAME)通常为其中至少64 MySQL使用的默认排序该字符集()的所有的搜索,排序,比较和其他串上这样的列操作。VARCHAR(N)CHARACTER SET utf8Nutf8_general_ci

    由于某些MySQL对象表示为文件,因此在INFORMATION_SCHEMA字符串列中进行搜索可能会受到文件系统区分大小写的影响。有关更多信息,请参见“在INFORMATION_SCHEMA搜索中使用归类”。

    INFORMATION_SCHEMA代替SHOW语句

    SELECT ... FROM INFORMATION_SCHEMA语句旨在作为一种更一致的方式来提供对SHOWMySQL支持的各种语句(SHOW DATABASESSHOW TABLES等)提供的信息的访问。使用SELECT具有这些优势,相比于SHOW

    • 它符合Codd的规则,因为所有访问都在表上完成。
    • 您可以使用SELECT语句的熟悉语法,只需要学习一些表和列名。
    • 实现者不必担心添加关键字。
    • 您可以将INFORMATION_SCHEMA查询的结果过滤,排序,连接和转换为应用程序所需的任何格式,例如要解析的数据结构或文本表示形式。
    • 此技术与其他数据库系统更可互操作。例如,Oracle数据库用户熟悉Oracle数据字典中的查询表。

    因为SHOW是熟悉的并且被广泛使用,所以这些SHOW语句仍然可以替代。实际上,随着“对SHOW语句的扩展”中所述INFORMATION_SCHEMA,对进行了增强。SHOW

    INFORMATION_SCHEMA和特权

    每个MySQL用户都有权访问这些表,但只能看到表中与用户具有适当访问权限的对象相对应的行。在某些情况下(例如,表中的ROUTINE_DEFINITIONINFORMATION_SCHEMAROUTINES),特权不足的用户会看到NULL。这些限制不适用于InnoDB表格。您只能以PROCESS特权参见它们。

    相同的特权适用于从语句中选择信息INFORMATION_SCHEMA并通过SHOW语句参见相同的信息。无论哪种情况,您都必须对某个对象具有某种特权才能参见有关该对象的信息。

    性能考量

    INFORMATION_SCHEMA从多个数据库中搜索信息的查询可能会花费很长时间并影响性能。要检查查询的效率,可以使用EXPLAIN。有关使用EXPLAIN输出调优INFORMATION_SCHEMA查询的信息,请参见“优化INFORMATION_SCHEMA查询”。

    标准注意事项

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

    SQL Server 2000(也遵循该标准)的用户可能会注意到强烈的相似性。但是,MySQL省略了许多与我们的实现无关的列,并添加了特定于MySQL的列。表ENGINE中的列就是这样添加的一列INFORMATION_SCHEMATABLES

    尽管其他DBMS使用多种名称,例如syscatsystem,但是标准名称是INFORMATION_SCHEMA

    为了避免使用标准或DB2,SQL Server或Oracle中保留的任何名称,我们更改了某些标记为“ MySQL extension ”的列的名称。(例如,我们在表中更改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表中列的名称。除非“备注”字段显示“ MySQL扩展名”,否则这与标准SQL名称相对应。”
    • SHOWName ”表示最接近的SHOW语句中的等效字段名称(如果有)。
    • “备注”在适用时提供了其他信息。如果此字段是NULL,则表示该列的值始终为NULL。如果此字段显示“ MySQL扩展”,则该列是标准SQL的MySQL扩展。

    许多部分指出了SHOW与从中SELECT检索信息的语句等效的语句INFORMATION_SCHEMA。对于SHOW如果省略子句而显示默认数据库信息的语句,通常可以通过向查询子句中添加从表中检索信息的条件来选择默认数据库的信息。FROM db_nameAND TABLE_SCHEMA = SCHEMA()WHEREINFORMATION_SCHEMA

    相关信息

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

    • 有关INFORMATION_SCHEMA特定于InnoDB存储引擎的表的信息:“ INFORMATION_SCHEMA InnoDB表”
    • 有关INFORMATION_SCHEMA特定于线程池插件的表的信息:“ INFORMATION_SCHEMA线程池表”
    • 有关INFORMATION_SCHEMA特定于CONNECTION_CONTROL插件的表的信息:“ INFORMATION_SCHEMA连接控制表”
    • 有关INFORMATION_SCHEMA数据库的常见问题解答:第A.7节“ MySQL 8.0 FAQ:INFORMATION_SCHEMA”
    • INFORMATION_SCHEMA查询和优化器:“优化INFORMATION_SCHEMA查询”
    • 归类对INFORMATION_SCHEMA比较的影响:“在INFORMATION_SCHEMA搜索中使用归类”