information_schema库所提供的信息详情
信息管理系统是一个高效的数据管理工具,帮助用户快速支持结构化数据,并且提供包括表、字段、视图等元数据对象信息,是保持数据的完整性、准确性和一致性的重要工具。在信息管理系统中,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库信息是一个相当有用的工具。
