不知道大家有没有注意到,当你安装好MySQL数据库环境后,然后使用客户端连接后,会发现数据库列表不是空的,会有四个数据库(information_schema、mysql、sysperformance_schema),你有有没有对这些数据库有些好奇呢,今天先给大家聊聊MySQL内置的information_schema 数据库相关的知识,希望对大家深入了解MySQL能够提供一些帮助!
information_schema 是 MySQL 数据库中内置的一个系统数据库,它的作用主要是存储关于整个MySQL实例当中数据库、数据表、列、索引、约束、存储过程、函数、触发器等各种元数据信息。我们日常使用它可以很方便查询和分析数据库的结构和数据库的一些统计信息。 另外很多数据库客户端的开发、数据库表结构生成等工具、数据库运行状态分析都是基于这个表的数据来进行开发的。
注意:information_schema 中的数据是只读的,不允许对其进行修改。 它会随着数据库的变化根据变化,比如你新建一个数据表,对应存储数据表的记录也会发生变化。
执行如下命令,查询information_schema的数据表
SELECT TABLE_NAME from information_schema.`TABLES` where TABLE_SCHEMA='information_schema';
mysql5.7 查询结果有61张数据表,查询结果如下:
CHARACTER_SETS
COLLATIONS
COLLATION_CHARACTER_SET_APPLICABILITY
COLUMNS
COLUMN_PRIVILEGES
ENGINES
EVENTS
FILES
GLOBAL_STATUS
GLOBAL_VARIABLES
KEY_COLUMN_USAGE
OPTIMIZER_TRACE
PARAMETERS
PARTITIONS
PLUGINS
PROCESSLIST
PROFILING
REFERENTIAL_CONSTRAINTS
ROUTINES
SCHEMATA
SCHEMA_PRIVILEGES
SESSION_STATUS
SESSION_VARIABLES
STATISTICS
TABLES
TABLESPACES
TABLE_CONSTRAINTS
TABLE_PRIVILEGES
TRIGGERS
USER_PRIVILEGES
VIEWS
INNODB_LOCKS
INNODB_TRX
INNODB_SYS_DATAFILES
INNODB_FT_CONFIG
INNODB_SYS_VIRTUAL
INNODB_CMP
INNODB_FT_BEING_DELETED
INNODB_CMP_RESET
INNODB_CMP_PER_INDEX
INNODB_CMPMEM_RESET
INNODB_FT_DELETED
INNODB_BUFFER_PAGE_LRU
INNODB_LOCK_WAITS
INNODB_TEMP_TABLE_INFO
INNODB_SYS_INDEXES
INNODB_SYS_TABLES
INNODB_SYS_FIELDS
INNODB_CMP_PER_INDEX_RESET
INNODB_BUFFER_PAGE
INNODB_FT_DEFAULT_STOPWORD
INNODB_FT_INDEX_TABLE
INNODB_FT_INDEX_CACHE
INNODB_SYS_TABLESPACES
INNODB_METRICS
INNODB_SYS_FOREIGN_COLS
INNODB_CMPMEM
INNODB_BUFFER_POOL_STATS
INNODB_SYS_COLUMNS
INNODB_SYS_FOREIGN
INNODB_SYS_TABLESTATS
说明:实际上这61张不是实际的数据表,属于视图。只能读取操作。
主要MySQL版本中的information_schema区别
MySQL 5.6版本
总共有59张表,其中10张MyISAM引擎临时表(数据字典表),49张Memory引擎临时表(保存统计信息和一些临时信息)。
MySQL 5.7版本
总共有61张表,其中10个InnoDB存储引擎临时表(数据字典表),51个Memory引擎临时表。
MySQL 8.0版本
数据字典表(包含部分原memory引擎临时表)都迁移到了mysql数据库的schema架构下,且在mysql schema下这些数据字典表被隐藏,无法直接访问,需要通过information_schema下的同名表进行访问(统计信息表保留在information_schema下且仍然为Memory引擎)
主要是用来存储当前数据库实例的中所有的数据库信息。
-- 查询当前数据库实例所有的数据库信息
SELECT * from information_schema。SCHEMATA;
说明:主要包含数据库名、数据库字符集编码信息。
主要是存储所有表的信息,包括表名、所属数据库、表类型、引擎类型、行数、存储占用、创建时间等信息。
-- 查询当前数据库实例所有数据表信息
SELECT * from information_schema.Tables;
主要是存储当前数据库实例所有数据表中字段详细信息,比如所属数据库、所属表名、字段名称、字段长度、字段类型、字段注释、是否是主键等字段的详情信息。
-- 查询当前数据库实例所有数据表中数据字段的信息
SELECT * from information_schema.`COLUMNS`;
主要是存储所有表的索引信息,包括索引名称、所属数据库、所属表、索引类型等。
-- 查询当前数据库实例所有数据表中索引信息
SELECT * from information_schema.`STATISTICS`;
主要是存储当前数据库实例所有的数据库视图信息,包括所属数据库、视图名称、视图定义、字符集等信息。
-- 查询当前数据库实例所有数据视图
SELECT * from information_schema.`VIEWS`;
主要是存储当前数据库实例所有的函数、存储过程信息,包括所属数据库、函数/存储过程名称、存储过程定义SQL、字符集等信息。
-- 查询当前数据库实例所有函数和存储过程
SELECT * from information_schema.`ROUTINES`;
主要存储当前数据库实例的约束和唯一主键信息,可以用来查询对应数据表的约束信息,查询结果主要包含所属数据库、约束名称、所属数据表、约束类型(主键约束、唯一约束等等)
-- 查询当前数据库实例所有约束
SELECT * from TABLE_CONSTRAINTS;
主要存储当前数据库实例的触发器信息,主要包括所属数据库、触发器名称、触发器定义sql等信息。
-- 查询当前数据库实例所有触发器信息
SELECT * from information_schema.TRIGGERS;
information_schema 是掌握整个数据库实例数据库表结构信息的非常重要的内容,以上小编整理的比较常用的information_schema 的介绍,大家如果有更加实用的欢迎补充!
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。