MySQL元数据库information schema

news/2025/11/2 1:09:37/文章来源:https://www.cnblogs.com/ciel717/p/19180313

一、概述

information_schema提供了对数据库元数据、统计信息以及有关MySQLServer信息的访问(例如:数据库名或表名、字段的数据类型和访问权限等)。该库中保存的信息也可以称为MySQL的数据字典或系统目录。

在每个MySQL实例中都有一个独立的information_schema,用来存储MySQL实例中所有其他数据库的基本信息。information_schema库下包含多个只读表(非持久表),所以在磁盘中的数据目录下没有对应的关联文件,且不能对这些表设置触发器。虽然在查询时可以使用USE语句将默认数据库设置为information_schema,但该库下的所有表是只读的,不能执行INSERTUPDATEDELETE等数据变更操作。针对information_schema下的表的查询操作可以替代一些SHOW查询语句(例如:SHOW DATABASESSHOW TABLES等)。

二、入门

查看当前数据库下表存储的信息

mysql> use information_schema;
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -ADatabase changed
mysql> show tables;
+---------------------------------------+
| Tables_in_information_schema          |
+---------------------------------------+
| ADMINISTRABLE_ROLE_AUTHORIZATIONS     |
| APPLICABLE_ROLES                      |
| CHARACTER_SETS                        |
| CHECK_CONSTRAINTS                     |
| COLLATION_CHARACTER_SET_APPLICABILITY |
| COLLATIONS                            |
| COLUMN_PRIVILEGES                     |
| COLUMN_STATISTICS                     |
| COLUMNS                               |
| COLUMNS_EXTENSIONS                    |
| ENABLED_ROLES                         |
| ENGINES                               |
| EVENTS                                |
| FILES                                 |
| INNODB_BUFFER_PAGE                    |
| INNODB_BUFFER_PAGE_LRU                |
| INNODB_BUFFER_POOL_STATS              |
| INNODB_CACHED_INDEXES                 |
| INNODB_CMP                            |
| INNODB_CMP_PER_INDEX                  |
| INNODB_CMP_PER_INDEX_RESET            |
| INNODB_CMP_RESET                      |
| INNODB_CMPMEM                         |
| INNODB_CMPMEM_RESET                   |
| INNODB_COLUMNS                        |
| INNODB_DATAFILES                      |
| INNODB_FIELDS                         |
| INNODB_FOREIGN                        |
| INNODB_FOREIGN_COLS                   |
| INNODB_FT_BEING_DELETED               |
| INNODB_FT_CONFIG                      |
| INNODB_FT_DEFAULT_STOPWORD            |
| INNODB_FT_DELETED                     |
| INNODB_FT_INDEX_CACHE                 |
| INNODB_FT_INDEX_TABLE                 |
| INNODB_INDEXES                        |
| INNODB_METRICS                        |
| INNODB_SESSION_TEMP_TABLESPACES       |
| INNODB_TABLES                         |
| INNODB_TABLESPACES                    |
| INNODB_TABLESPACES_BRIEF              |
| INNODB_TABLESTATS                     |
| INNODB_TEMP_TABLE_INFO                |
| INNODB_TRX                            |
| INNODB_VIRTUAL                        |
| KEY_COLUMN_USAGE                      |
| KEYWORDS                              |
| OPTIMIZER_TRACE                       |
| PARAMETERS                            |
| PARTITIONS                            |
| PLUGINS                               |
| PROCESSLIST                           |
| PROFILING                             |
| REFERENTIAL_CONSTRAINTS               |
| RESOURCE_GROUPS                       |
| ROLE_COLUMN_GRANTS                    |
| ROLE_ROUTINE_GRANTS                   |
| ROLE_TABLE_GRANTS                     |
| ROUTINES                              |
| SCHEMA_PRIVILEGES                     |
| SCHEMATA                              |
| SCHEMATA_EXTENSIONS                   |
| ST_GEOMETRY_COLUMNS                   |
| ST_SPATIAL_REFERENCE_SYSTEMS          |
| ST_UNITS_OF_MEASURE                   |
| STATISTICS                            |
| TABLE_CONSTRAINTS                     |
| TABLE_CONSTRAINTS_EXTENSIONS          |
| TABLE_PRIVILEGES                      |
| TABLES                                |
| TABLES_EXTENSIONS                     |
| TABLESPACES                           |
| TABLESPACES_EXTENSIONS                |
| TRIGGERS                              |
| USER_ATTRIBUTES                       |
| USER_PRIVILEGES                       |
| VIEW_ROUTINE_USAGE                    |
| VIEW_TABLE_USAGE                      |
| VIEWS                                 |
+---------------------------------------+
79 rows in set (0.00 sec)

根据MySQL版本的不同,表的个数和存放是有所不同的。

MySQL 5.6版本

总共有59张表,其中10MyISAM引擎临时表(数据字典表),49Memory引擎临时表(保存统计信息和一些临时信息)。

MySQL 5.7版本

总共有61张表,其中10InnoDB存储引擎临时表(数据字典表),51Memory引擎临时表。

MySQL 8.0版本

数据字典表(包含部分原memory引擎临时表)都迁移到了mysql数据库的schema架构下,且在mysql schema下这些数据字典表被隐藏,无法直接访问,需要通过information_schema下的同名表进行访问(统计信息表保留在information_schema下且仍然为Memory引擎)。

三、表分类

information_schema中的表可以按照其功能分为以下几个主要类别:

  • 表结构相关表
  • 权限管理相关表
  • 统计信息相关表
  • 事件调度器相关表
  • 触发器相关表
  • 视图相关表
  • 字符集和校对规则相关表
  • 存储过程和函数相关表

3.1 表结构相关表

  • tables表: 包含了数据库中所有表的元数据信息。通过查询tables表,可以获取表的名称、表类型、创建时间、最后修改时间等信息。
  • columns表: 包含了数据库中所有列的元数据信息。通过查询columns表,可以获取列的名称、数据类型、默认值、是否允许为空等信息。

3.2 权限管理相关表

  • user_privileges表: 包含了用户在全局范围内的权限信息。通过查询user_privileges表,可以获取用户的权限级别和权限范围。
  • table_privileges表 : 包含了用户在特定表上的权限信息。通过查询table_privileges表,可以获取用户在某个表上的权限级别和权限范围。

3.3 统计信息相关表

  • statistics表: 包含了表的索引信息。通过查询statistics表,可以获取表的索引名称、索引类型、唯一性等信息。

3.4 事件调度器相关表

  • events表: 包含了数据库中所有事件的元数据信息。通过查询events表,可以获取事件的名称、调度器名称、触发条件、执行频率等信息。

3.5 触发器相关表

  • triggers表: 包含了数据库中所有触发器的元数据信息。通过查询triggers表,可以获取触发器的名称、触发时机、触发事件、触发条件等信息。

3.6 视图相关表

  • views表: 包含了数据库中所有视图的元数据信息。通过查询views表,可以获取视图的名称、定义、创建时间等信息。

3.7 字符集和校对规则相关表

  • character_sets表: 包含了数据库中所有字符集的元数据信息。通过查询character_sets表,可以获取字符集的名称、编码、最大长度等信息。
  • collations表: 包含了数据库中所有校对规则的元数据信息。通过查询collations表,可以获取校对规则的名称、字符集、排序规则等信息。

3.8 存储过程和函数相关表

  • routines表: 包含了数据库中所有存储过程和函数的元数据信息。通过查询routines表,可以获取存储过程和函数的名称、定义、参数列表等信息。

四、实践操作

常用的show命令如下:

SHOW DATABASES;                          #查看所有数据库
SHOW TABLES;                             #查看当前库的所有表
SHOW TABLES FROM  库名                   #查看某个指定库下的表
SHOW CREATE DATABASE 库名                #查看建库语句
SHOW CREATE TABLE 库名.表名              #查看建表语句
SHOW GRANTS FOR  root@'localhost'        #查看用户的权限信息
SHOW charset;                           #查看字符集
SHOW COLLATION                           #查看校对规则
SHOW PROCESSLIST;                        #查看数据库连接情况
SHOW INDEX FROM                          #表的索引情况
SHOW STATUS                              #数据库状态查看
SHOW STATUS LIKE '%lock%';               #模糊查询数据库某些状态
SHOW VARIABLES                           #查看所有配置信息
SHOW VARIABLES LIKE '%lock%';            #查看部分配置信息
SHOW ENGINES                             #查看支持的所有的存储引擎
SHOW ENGINE INNODB STATUS\G              #查看InnoDB引擎相关的状态信息
SHOW BINARY LOGS                         #列举所有的二进制日志
SHOW MASTER STATUS                       #查看数据库的日志位置信息
SHOW BINLOG evnets IN                    #查看二进制日志事件
SHOW SLAVE STATUS \G                     #查看从库状态
SHOW RELAYLOG EVENTS                     #查看从库relaylog事件信息
DESC (SHOW colums FROM city)             #查看表的列定义信息
-- https://dev.mysql.com/doc/refman/8.0/en/show.html

常用查询语句

-- 1. 查询整个数据库中所有库和所对应的表信息
SELECT
TABLE_SCHEMA,
GROUP_CONCAT(TABLE_NAME)
FROM
information_schema.TABLES
GROUP BY TABLE_SCHEMA;--2. 统计所有库中的表个数
SELECT
TABLE_SCHEMA,
COUNT(TABLE_NAME)
FROM
information_schema.TABLES
GROUP BY TABLE_SCHEMA;-- 3. 查询所有innodb引擎的表及所在的库
SELECT
TABLE_SCHEMA,
TABLE_NAME,
ENGINE
FROM
information_schema.TABLES
WHERE ENGINE = 'InnoDB';-- 4. 统计world数据库下每张表的磁盘空间占用
SELECT
TABLE_SCHEMA,
TABLE_NAME,
(
TABLE_ROWS * AVG_ROW_LENGTH + INDEX_LENGTH
) / 1024 AS size_KB
FROM
information_schema.TABLES
WHERE TABLE_SCHEMA = 'world';-- 5. 统计数据库总数据量
SELECT
SUM(
TABLE_ROWS * AVG_ROW_LENGTH + INDEX_LENGTH
) / 1024 AS size_KB
FROM
information_schema.TABLES;-- 6. 生成整个数据库下的所有表的单独备份语句
--格式:
--mysqldump -uroot -p123 库名 表名 >/bak/库名_表名.sql
--语句拼接:
SELECT
CONCAT(
"mysqldump -uroot -p123 ",
TABLE_SCHEMA,
" ",
TABLE_NAME,
" ",
">/bak/",
TABLE_SCHEMA,
"_",
TABLE_NAME,
".sql"
)
FROM
information_schema.TABLES
WHERE TABLE_SCHEMA = 'world'
INTO OUTFILE '/tmp/b.sh';

注意:要想 INTO OUTFILE '/tmp/b.sh’可以执行,需要在/etc/my.cnf配置文件中加入secure-FILE-priv=/tmp的配置,将/tmp目录设为安全目录

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/953128.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

CSP-S 2025 差点(貌似真的)坠机记

突然发现自己成为老年选手。 省流:\([0,100]+[0,100]+[0,50]+[0,5]=[0,255]\)。 2025.9.19 明天怎么初赛了? 2025.9.20 今天怎么初赛了? 去年还做了很长时间的模拟题,今年是一套完整的题目都没做,不管了 qwq。从学…

一切的终点

这篇文章本来应该是一个月后写的,唉。 当 5 分钟切掉 T1,代码飞速跑过 T2 大样例时,我有那么一瞬间觉得自己能赢。 死磕 T3 2h+,费劲毕生所学无果,尽管最后时刻调出暴力,也无法改变这一切的结果。 梦想的舞台就在眼…

题解:AT_abc304_f [ABC304F] Shift Table

思路 首先,很容易想到枚举合法的循环节长度,然后遍历整个字符串,对必须要干活的天数进行标记,最后记循环节长度为 \(l\),标记天数为 \(cnt\),则这个循环节长度就有 \(2^{l-cnt}\) 个合法方案。 但是这样计算会导…

题解:CF1936C Pokmon Arena

考虑如何建图,首先对于 \(n\) 个人的 \(m\) 个属性我们都建一个点,表示目前第 \(j\) 个属性达到了 \(a_{i,j}\) 的代价。为了计算每个人的出场费用,我们再新建 \(n\) 个点(记其编号为 \(b_i\)),分别表示现在场上…

题解:CF983E NN country

首先思考线路只有从祖先到子孙的链的情况,对于询问的两个点 \(x\) 和 \(y\),我们肯定要先从 \(x\) 跳到它们的 LCA,再从 LCA 跳到 \(y\)。由于从 LCA 到 \(y\) 的过程和从 \(y\) 到 LCA 的过程是等价的,所以我们可…

CSP-S 2023 游记

1. 你知道吗?红绿灯倒计时的第一位的取值范围不是 0~9,而是 0~F。 半个十六进制的红绿灯。 半个有 OI 的生活。 第一次看到它,是在考完 csps2023 回家的路上,我家长确信那只是二极管失灵,但我亲眼看到它从 E,到…

软件技术基础的第二次作业

这个作业属于哪个课程 https://edu.cnblogs.com/campus/zjlg/25rjjc/homework/13541这个作业的目标 建立本地项目并关联远程仓库,熟悉程序设计的流程姓名-学号 熊宇彤-2023331200153码云仓库地址:https://gitee.com/…

补发周五日报10.31

所花时间:90min 今天主要学习内容主要是机器学习,上课没咋听 知识点总结 这个问题很关键,决策树是机器学习的基础算法,也是软件设计师考试中机器学习部分的高频考点!核心结论:决策树是一种基于 “分而治之” 思想…

CSP2025-S 游记

Day -2 早上写了教练的模拟赛,下午讲题。 晚上和 @Kevin_Mu 一起研究了神秘的dfs序求LCA,发现非常好写,同时学了ST表。 Day -1 努力的刷板子,但是头疼只写了一点点,然后把所有写过的板子看了看,把很久没写过的单…

langgraph-reflection

langgraph-reflection https://github.com/fanqingsong/langgraph-reflectionDescriptionArchitectureThis reflection agent uses two subagents:- A "main" agent, which is the agent attempting to solv…

学习日报11.2

所花时间:1h 代码量:0 搏客量:2 所学知识点:今天所学的内容是有关于中级软件设计师备考内容 关于上午题 由于所学知识点比较多,且杂乱,就简单叙述一下,大致是有关于有限自动机,一个叫状态图的认识,刚开始比较…

2025CSP-S游记

DAY -13 脱产了。正好还是运动会,到时候会有人来一起在机房。 DAY -12~-10 运动会,感觉好青春啊 hhh。这个气温也是迅速下降,好在机房还是冬暖夏凉。 DAY -9~-5 一个人在机房,但其实也还好,主要就是做同学的好题题…

获取网页logo图标(ico文件)

怎么获取网页logo图标的URL链接 第一种方法:最常用的方法(适用于90%的站点)是,直接在访问网址首页链接后加上上/favicon.ico,例如:https://www.baidu.com/favicon.ico 第二种方法:按F12,进入开发者模式。以wi…

题解:P6811 「MCOI-02」Build Battle 建筑大师

设 $f_i$ 为匹配到第 $i$ 为的序列个数,令 $last_{x,i}$ 表示从第 $i$ 为往前第一个出现 $x$ 的位置,可以得到转移 $f_i=\sum_{j=last_{a_i,i}}^{i-1}{f_j}$。最后答案即为 $\sum{f}$。 由于本题 $a$ 的特殊性,所有…

[KaibaMath]1017 关于收敛数列与其子数列之间的关系定理的证明

[KaibaMath]1017 关于收敛数列与其子数列之间的关系定理的证明收敛数列的任意子数列必收敛,且极限与原数列的极限一致。反之,若一个数列存在发散的子数列,或存在两个极限不同的子数列,则该数列必发散。下面给出收敛…

Day9综合案例一

<!DOCTYPE html> <html lang="en"> <head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0">…

学习日报11.1

所花时间:2h 代码量:200 所学知识点: 今日核心知识点总览 有限自动机(FA):含核心五要素(状态集合、输入符号集合等),区分 DFA 与 NFA,掌握 NFA 转 DFA 的子集构造法及字符串识别流程。 上下文无关文法:明确…