MySQL的INFORMATION_SCHEMA数据库我能获取到什么?

     大家在安装或使用MYSQL时,会发现除了自己安装的数据库以外,还有一个 information_schema数据库。information_schema数据库是做什么用的呢?

      在MySQL中,把 information_schema 看作是一个数据库,确切说是信息数据库。其中保存着关于MySQL服务器所维护的所有其他数据库的信息。如数据库名,数据库的表,表栏的数据类型与访问权 限等。在INFORMATION_SCHEMA中,有数个只读表。它们实际上是视图,而不是基本表,因此,你将无法看到与之相关的任何文件。其实就可以理解为mysql数据库的元数据。数据的数据。

     

1:information_schema数据库表说明:

SCHEMATA表:提供了当前mysql实例中所有数据库的信息。是show databases的结果取之此表。

TABLES表:提供了关于数据库中的表的信息(包括视图)。详细表述了某个表属于哪个schema,表类型,表引擎,创建时间等信息。是show tables from schemaname的结果取之此表。

COLUMNS表:提供了表中的列信息。详细表述了某张表的所有列以及每个列的信息。是show columns from schemaname.tablename的结果取之此表。

STATISTICS表:提供了关于表索引的信息。是show index from schemaname.tablename的结果取之此表。

USER_PRIVILEGES(用户权限)表:给出了关于全程权限的信息。该信息源自mysql.user授权表。是非标准表。

SCHEMA_PRIVILEGES(方案权限)表:给出了关于方案(数据库)权限的信息。该信息来自mysql.db授权表。是非标准表。

TABLE_PRIVILEGES(表权限)表:给出了关于表权限的信息。该信息源自mysql.tables_priv授权表。是非标准表。

COLUMN_PRIVILEGES(列权限)表:给出了关于列权限的信息。该信息源自mysql.columns_priv授权表。是非标准表。

CHARACTER_SETS(字符集)表:提供了mysql实例可用字符集的信息。是SHOW CHARACTER SET结果集取之此表。

COLLATIONS表:提供了关于各字符集的对照信息。

COLLATION_CHARACTER_SET_APPLICABILITY表:指明了可用于校对的字符集。这些列等效于SHOW COLLATION的前两个显示字段。

TABLE_CONSTRAINTS表:描述了存在约束的表。以及表的约束类型。

KEY_COLUMN_USAGE表:描述了具有约束的键列。

ROUTINES表:提供了关于存储子程序(存储程序和函数)的信息。此时,ROUTINES表不包含自定义函数(UDF)。名为“mysql.proc name”的列指明了对应于INFORMATION_SCHEMA.ROUTINES表的mysql.proc表列。

VIEWS表:给出了关于数据库中的视图的信息。需要有show views权限,否则无法查看视图信息。

TRIGGERS表:提供了关于触发程序的信息。必须有super权限才能查看该表。

 

2:一些关于INFORMATION_SCHEMA的使用技巧

1.类似MS SQL SERVER中的SP_HELPTEXT查看存储过程、函数、视图的功能:

SHOW CREATE PROCEDURE 存储过程名;
SHOW CREATE FUNCTION 函数名;
SHOW CREATE VIEW 视图名;

还可以使用以下办法(但下面的办法只包含存储过程主体部分,不包含Create以及传入参数申明的部分):

SELECT ROUTINE_DEFINITION FROM INFORMATION_SCHEMA.ROUTINES WHERE ROUTINE_SCHEMA='数据库名' AND ROUTINE_TYPE='PROCEDURE' and ROUTINE_NAME='存储过程名';

函数也类似,只需要将查询条件对应改成ROUTINE_TYPE='FUNCTION'就行

2.查看当前实例包含的数据库列表:

SELECT * FROM INFORMATION_SCHEMA.SCHEMATA;

3.查询数据库中所有的表(包含视图):

SELECT * FROM INFORMATION_SCHEMA.tables WHERE TABLE_SCHEMA='数据库名' and TABLE_TYPE='BASE TABLE';

SELECT * FROM INFORMATION_SCHEMA.tables WHERE TABLE_SCHEMA='数据库名' and TABLE_TYPE='VIEW';

4.查询数据库中所有的视图:

SELECT * FROM INFORMATION_SCHEMA.VIEWS WHERE TABLE_SCHEMA='数据库名';

5.查询表对应的字段:

a.

SELECT * FROM INFORMATION_SCHEMA.COLUMNS WHERE table_schema='数据库名' and table_name='表名';

b.横向列出表对应的字段,方便写Insert语句:

select GROUP_CONCAT(COLUMN_name) as '字段' from INFORMATION_SCHEMA.COLUMNS WHERE table_schema='数据库名' and table_name='表名';

7.查询关键字在哪些存储过程或者函数中存在:

SELECT * FROM INFORMATION_SCHEMA.ROUTINES WHERE ROUTINE_SCHEMA='数据库名' AND ROUTINE_TYPE='PROCEDURE' AND ROUTINE_DEFINITION like '%关键字%';

SELECT * FROM INFORMATION_SCHEMA.ROUTINES WHERE ROUTINE_SCHEMA='数据库名' AND ROUTINE_TYPE='FUNCTION' AND ROUTINE_DEFINITION like '%关键字%';

3:查看MySQL数据库、表容量大小

3.1. 查看所有数据库容量大小

select
table_schema as '数据库',
sum(table_rows) as '记录数',
sum(truncate(data_length/1024/1024/1024, 2)) as '数据容量(G)',
sum(truncate(index_length/1024/1024/1024, 2)) as '索引容量(G)'
from information_schema.tables
group by table_schema 
order by sum(data_length) desc,sum(index_length) desc;


3.2. 查看所有数据库各表容量大小​​​​​​​

select
table_schema as '数据库',
table_name as '表名',
table_rows as '记录数',
truncate(data_length/1024/1024, 2) as '数据容量(MB)',
truncate(index_length/1024/1024, 2) as '索引容量(MB)'
from information_schema.tables
where table_schema='linkthingsdb' order by data_length desc, index_length desc;

3.3. 查看指定数据库容量大小

例:查看mysql库容量大小

select
​​​​​​​table_schema as '数据库',
sum(table_rows) as '记录数',
sum(truncate(data_length/1024/1024, 2)) as '数据容量(MB)',
sum(truncate(index_length/1024/1024, 2)) as '索引容量(MB)'
from 
information_schema.tableswhere table_schema='mysql';

3.4:查看指定数据库各表容量大小

例:查看mysql库各表容量大小

select
table_schema as '数据库',
table_name as '表名',
table_rows as '记录数',
truncate(data_length/1024/1024, 2) as '数据容量(MB)',
truncate(index_length/1024/1024, 2) as '索引容量(MB)'
from information_schema.tableswhere table_schema='mysql'order by data_length desc, 
index_length desc;

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值