欢迎访问宙启技术站
智能推送

information_schema库所提供的信息详情

发布时间:2023-05-14 10:51:33

信息管理系统是一个高效的数据管理工具,帮助用户快速支持结构化数据,并且提供包括表、字段、视图等元数据对象信息,是保持数据的完整性、准确性和一致性的重要工具。在信息管理系统中,information_schema库是一个系统库,提供了关于MySQL服务器内部各种数据库对象和操作的信息。本文将对information_schema库所提供的信息进行详细的介绍。

information_schema库

information_schema库是MySQL系统库,其含有的表不是实际存储数据表,而是用于记录系统环境中的数据。information_schema库存储的是元数据信息数据表(object tables),这些表可以被视为是MySQL内置的视图,为查询系统对象及其元数据值提供了一种标准方式。

information_schema 库存在于MySQL之中,由一系列视图所组成,这些视图就是表。相对于InnoDB表空间、MyISAM表空间、日志文件、参数配置文件等等需要经常修改和调优的实际数据文件,information_schema 视图集合存储了大量的元数据信息,信息都以表的形式存在,而用户可以通过与硬盘上真实的数据对象和逻辑操作相比较,了解其目前的状态、计算量、变化历史,以及其他一些关键性的信息。 information_schema 库是以视图形式存储的,如果你提交一个 SELECT * FROM information_schema.TABLES 类型的请求,就是相当于调用一个视图检索表的列表信息。

INFORMATION_SCHEMA库提供了如下类型的表:

表名称 描述

CHARACTER_SETS 所有字符集的名称和ID

COLLATIONS 所有字符集的校对名称和ID

SESSION_VARIABLES 会话中的所有工作变量

SESSION_STATUS 有关服务器当前状态的信息

PLUGINS 当前可用插件的名称、描述和其他信息

ENGINES 所有可用的MySQL存储引擎

TABLES 当前存在的所有表的名称

COLUMNS 所有表中的所有列的名称、数据类型

STATISTICS 所有表和索引的统计信息

TABLE_CONSTRAINTS 表的约束条件

REFERENTIAL_CONSTRAINTS 表的参考约束

KEY_COLUMN_USAGE 表中使用的所有列的信息

ROUTINES 所有过程和函数的名称和定义

PARAMETERS 所有过程和函数的参数列表

TABLES 表

在information_schema库中,TABLES表存储了数据库中所有表的信息。在默认情况下,SELECT * FROM TABLES将会返回所有数据库所有表的名称以及所属数据库的名称。此外,该表也会包含表的引擎类型、版本、行数、列数、创建时间和更新时间等信息。下面是一些常用的查询语句:

查询所有表信息:

SELECT

    TABLE_SCHEMA,

    TABLE_NAME,

    ENGINE,

    VERSION,

    ROW_FORMAT,

    TABLE_ROWS,

    AVG_ROW_LENGTH,

    DATA_LENGTH,

    MAX_DATA_LENGTH,

    INDEX_LENGTH,

    DATA_FREE,

    AUTO_INCREMENT,

    CREATE_TIME,

    UPDATE_TIME,

    CHECK_TIME,

    TABLE_COLLATION,

    CHECKSUM,

    CREATE_OPTIONS,

    TABLE_COMMENT

FROM

    information_schema.TABLES;

查询所有表及其行数:

SELECT

    concat(table_schema,'.',table_name) as table_name,count(*) as num_rows

FROM

    information_schema.TABLES

GROUP BY

    table_name

ORDER BY 

    num_rows desc;

查询表的各个列数等统计信息:

SELECT

    TABLE_SCHEMA,TABLE_NAME,COLUMN_NAME,COLLATION_NAME,IS_NULLABLE,

    COLUMN_TYPE,COLUMN_KEY,EXTRA,PRIVILEGES,ORDINAL_POSITION,

    COLUMN_DEFAULT,CHARACTER_SET_NAME,NUMERIC_PRECISION,NUMERIC_SCALE,

    DATA_TYPE,CHARACTER_MAXIMUM_LENGTH,COLUMN_COMMENT,CHARACTER_OCTET_LENGTH

FROM

    information_schema.COLUMNS

WHERE 

    TABLE_NAME ='table_name'

ORDER BY

    ORDINAL_POSITION;

COLUMNS 表

COLUMNS表存储了Tables表中所有表的列信息。在默认情况下,SELECT * FROM COLUMNS将会返回所有列。其包括所属数据库名称(static),表名称(table),列名称(name),字符集名称(collation_name),是否为空(nullable),列类型(column_type),主键类型(column_key),外键引用(foreign_key),列额外信息(extra),列备注(comment),排序位置(ordinal_position),列默认值(column_default), 字符集名称(character_set_name),数字 精度(numeric_precision),小数位数(numeric_scale)、字符数据长度(character_maximum_length)等信息。下面是一些常用的查询语句:

查询某个表的所有列:

SELECT

    COLUMN_NAME AS "字段",

    COLUMN_DEFAULT AS "默认值",

    IS_NULLABLE AS "是否为空",

    DATA_TYPE AS "类型",

    CHARACTER_OCTET_LENGTH AS "最大字节数",

    COLUMN_KEY AS "主键类型",

    EXTRA AS "额外数据",

    COLUMN_COMMENT AS "备注"

FROM

    information_schema.COLUMNS

WHERE

    TABLE_SCHEMA = 'database' AND TABLE_NAME = 'table';

查询某个表的主键信息:

SELECT COLUMN_NAME 

FROM information_schema.KEY_COLUMN_USAGE 

WHERE TABLE_NAME='table_name' AND CONSTRAINT_NAME='PRIMARY';

查询某个表有哪些索引:

SELECT 

    distinct(concat(table_name,' ',index_name)) as indexname 

FROM

    information_schema.statistics 

WHERE 

    table_schema = 'database_name' AND table_name = 'table_name';

ROUTINES 表

在information_schema库中,ROUTINES表存储了数据库中所有函数和存储过程的信息。在默认情况下,SELECT * FROM ROUTINES将会返回所有函数和存储过程的名称和定义。该表包含有关函数和存储过程的详细信息,包括函数参数定义、SQL语句、创建时间、更新时间、是否是嵌套过程等。下面是一些常用的查询语句:

查询某个函数或存储过程的定义:

SELECT ROUTINE_DEFINITION 

FROM information_schema.ROUTINES 

WHERE ROUTINE_NAME='function_name';

查询某个存储过程的参数定义:

SELECT 

    PARAMETER_NAME, DATA_TYPE, CHARACTER_MAXIMUM_LENGTH

FROM 

    information_schema.PARAMETERS

WHERE 

    SPECIFIC_NAME = 'sp_name'

总结

INFORMATION_SCHEMA库是用于访问MySQL服务器元数据的标准SQL接口,它提供了一个类似视图的概念,用于查看MySQL实例中所有的对象(数据库、表、索引等),其中重要的表包括TABLES、COLUMNS、ROUTINES,可以用于统计表信息、查询存储过程定义、管理索引和分区等。information_schema库的信息帮助系统管理员了解MySQL数据库状态及其特性,掌握管理数据库的方法和手段。在实际的工作或学习中,尤其是数据管理方面,information_schema库信息是一个相当有用的工具。