MySQL information_schema 数据库与实例概述

举报
Tiamo_T 发表于 2021/11/25 14:24:26 2021/11/25
【摘要】 通常,您将执行 DESCRIBE 或 SHOW 命令来获取元数据信息。但是,使用 information_schema 视图,您可以执行标准的 select SQL 命令来获取元数据信息。在本文中,让我们了解几个有关如何使用 information_schema 数据库的实际示例。

从 MySQL 5 开始,当您执行show databases命令时,information_schema 将列在数据库列表中。information_schema是一个虚拟的 MySQL 数据库,存储所有 MySQL 数据库的元数据信息。

通常,您将执行 DESCRIBE 或 SHOW 命令来获取元数据信息。但是,使用 information_schema 视图,您可以执行标准的 select SQL 命令来获取元数据信息。在本文中,让我们了解几个有关如何使用 information_schema 数据库的实际示例。

1.获取information_schema的基本信息

show databases命令将在数据库列表中显示information_schema。information_schema 不是物理数据库。当您对 information_schema 表执行select时,它会从真实数据库和其他系统变量中提取数据。

mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| bugs               |
| mysql              |
| sugarcrm           |
+--------------------+
4 rows in set (0.00 sec)

以下是 information_schema 数据库中可用的表(视图)。

mysql> use information_schema;
mysql> show tables;
+---------------------------------------+
| Tables_in_information_schema          |
+---------------------------------------+
| CHARACTER_SETS                        |
| COLLATIONS                            |
| COLLATION_CHARACTER_SET_APPLICABILITY |
| COLUMNS                               |
| COLUMN_PRIVILEGES                     |
| KEY_COLUMN_USAGE                      |
| PROFILING                             |
| ROUTINES                              |
| SCHEMATA                              |
| SCHEMA_PRIVILEGES                     |
| STATISTICS                            |
| TABLES                                |
| TABLE_CONSTRAINTS                     |
| TABLE_PRIVILEGES                      |
| TRIGGERS                              |
| USER_PRIVILEGES                       |
| VIEWS                                 |
+---------------------------------------+
17 rows in set (0.00 sec)

2.查询显示超过1000行的表

使用上面提到的 information_schema 表,您可以构建自己的查询来获取元数据信息。此示例显示具有超过 1000 行的 MySQL 表。

mysql> select concat(table_schema,'.',table_name) as table_name,table_rows
    -> from information_schema.tables where table_rows > 1000
    -> order by table_rows desc;

+----------------------------------+------------+
| table_name                       | table_rows |
+----------------------------------+------------+
| bugs.series_data                 |      52778 |
| bugs.bugs_activity               |      26436 |
| bugs.longdescs                   |      21473 |
| bugs.email_setting               |       5370 |
| bugs.attachments                 |       4714 |
| bugs.attach_data                 |       4651 |
| bugs.cc                          |       4031 |
| bugs.bugs                        |       2190 |
| bugs.namedqueries_link_in_footer |       1228 |
+----------------------------------+------------+
9 rows in set (0.04 sec)

3.查询列出所有没有主键的表

这个例子给出了所有没有主键的表的列表。

SELECT CONCAT(t.table_name,".",t.table_schema) as table_name
FROM information_schema.TABLES t
LEFT JOIN information_schema.TABLE_CONSTRAINTS tc
ON t.table_schema = tc.table_schema
AND t.table_name = tc.table_name
AND tc.constraint_type = 'PRIMARY KEY'
WHERE tc.constraint_name IS NULL
AND t.table_type = 'BASE TABLE';

4.使用information_schema实现表的历史数据

Putting MySQL information_schema to Use文章使用信息模式实现了一个历史数据库。本文的前半部分描述了历史数据库的需求,以及实现它的通用设计。后半部分描述了代码生成器的逐步构建,该代码生成器创建用于构建和加载历史数据库的 SQL。代码生成器由信息模式驱动,并详细讨论了信息模式的一些特征。

5.查询列出数据库中最大的前5张表

此示例给出了数据库中占用空间最大的前 5 个表及其大小(以 MB 为单位)。


mysql> SELECT concat(table_schema,'.',table_name) table_name,
    -> concat(round(data_length/(1024*1024),2),'M') data_length
    -> FROM information_schema.TABLES
    -> ORDER BY data_length DESC LIMIT 5;

+--------------------+-------------+
| table_name         | data_length |
+--------------------+-------------+
| bugs.attach_data   | 706.89M     |
| bugs.longdescs     | 3.45M       |
| bugs.bugs_activity | 1.45M       |
| bugs.series_data   | 0.75M       |
| bugs.attachments   | 0.51M       |
+--------------------+-------------+
5 rows in set (0.05 sec)
【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。