1 基础概念介绍

1.1 元数据

Mysql的元数据是存储在”基表”中,无法直接做增删改查,但是通过专用的DDL语句和DCL语句可进行修改,同时可通过专用视图和命令进行元数据的查询;show命令是封装好的功能,提供元数据查询基础功能;在information_schema中保存了大量元数据查询的视图,如数据库当中所有数据库的信息、所有表的信息,比如我们想统计某个数据库实例下的所有库和表的信息我们就可以查看information_schema库;

1.2 视图

类似于Linux当中alias别名的应用,即将一长串的命令定义成一个简单的别名,下次使用该命令时直接调用别名即可, 同理在mysql当中就是将一个查询语句定义为一个视图,下次想调该查询方法时,直接调用该试图即可。
mysql> create view NAME as 查询语句
image.png

2 information_schema基本应用

tables视图的应用
mysql> use information_schema ;
mysql> desc tables ;
image.png
tables常用的视图
TABLE_SCHEMA 表所在的库名
TABLE_NAME 表名
ENGINE 存储引擎
TABLE_ROWS 数据行
AVG_ROW_LENGTH 平均行长度
INDEX_LENGTH 索引长度
例子:
1)显示所有库和表的信息
db01 [information_schema]>select table_schema,table_name from information_schema.tables;
2)以以下模式显示所有的库和表的信息
—-world city,country,countrylanguage
db01 [information_schema]>select table_schema,group_concat(table_name) from information_schema.tables group by table_schema;
3)查询下所有innodb引擎的表
db01 [information_schema]>select table_schema,table_name from information_schema.tables where engine=’innodb’;
4)统计world库下的city表占用空间大小
平均行长度行数+索引长度=数据量的真实大小
avg_row_length
table_rows+index_length
db01 [information_schema]>select table_name,(avg_row_lengthtable_rows+index_length)/1024 from information_schema.tables where table_schema=’world’ and table_name=’city’;
5)统计world库数据量总大小
db01 [information_schema]>select table_name,sum((avg_row_length
table_rows+index_length))/1024 from information_schema.tables where table_schema=’world’;
6)统计每个库的数据量大小
db01 [information_schema]>select table_name,sum((avg_row_length*table_rows+index_length))/1024 from information_schema.tables group by table_schema order by total_KB desc;

3 配合concat()函数拼接语句或命令

例子:
1、模仿以下语句,进行数据库的分库分表备份。
mysqldump -uroot -pabc123.. world city >/bak/world_city.sql
select concat(“mysqldump -uroot -pabc123..”,table_schema,” “,table_name,” >/bak/“,table_schema,”-“,table_name,”.sql”) from information_schema.tables;
通过这种方式即输出了备份所有库下所有表的备份命令
image.png
2、模仿以下语句,进行批量生成对world库下所有表进行操作
alter table world.city discard tablespace;
“alter table”,schema_table,”.”schema_name, “discard tablespace;”) from information_schema.tables where table_schema=’world’;