转自: https://www.cnblogs.com/postnull/p/6697077.html

平时使用MySQL客户端操作数据库的同学,只要稍微留神都会发现,除了我们建的库之外,还经常看到三个数据库的影子:

1. information_schema
2. performance_schema
3. mysql

这三个数据库究竟是什么东西呢?今天我们好好认识一下MySQL三个火枪手中的information_schema。

一、数据库实例和数据库

在认识information_schema前,我们先了解下数据库实例和数据库的区别和联系。我们本地启动MySQL服务,就是启动了一个数据库实例,他首先是一个进程管理了一系列的数据库文件。而我们执行create database cmcc_web 这条SQL语句时,才是真正创建一个数据库,他是一堆表的集合,其实也是文件的集合。简而言之,数据库实例就是RDBMS(数据库管理系统),数据库就是Database,Database是存放数据的仓库,RDBMS就是管理仓库的系统。
在MySQL中,每个schema就是对应一个数据库。这个词将会在下面的篇幅频繁出现。

二、数据库元数据

元(meta),一般被我们翻译成“关于……的……”。元数据(meta data)——“data about data” 关于数据的数据,一般是结构化数据(如存储在数据库里的数据,规定了字段的长度、类型等)。(这段话来源于知乎)。
所以metadata就是描述数据的数据,在MySQL中就是描述database的数据。有哪些数据库、每个表有哪些表、表有多少字段、字段是什么类型等等,这样的数据就是数据库的元数据。

官方定义:

INFORMATION_SCHEMA provides access to database metadata, information about the MySQL server such as the name of a database or table, the data type of a column, or access privileges

综上,我们可以称information_schema是一个元数据库。它就像物业公司的信息库,对管理的每栋大厦有多少电梯、电梯型号、每个房间的长宽高等等了如指掌。

三、常见的表

1、SCHEMATA
提供数据库信息,有哪些数据库,字符集是GBK还是UTF-8等等。常用字段:

字段名 含义 备注
SCHEMA_NAME 数据库名
DEFAULT_CHARACTER_SET_NAME 字符集
DEFAULT_COLLATION_NAME 排序规则

等同命令:SHOW DATABASES

2、TABLES
提供表的信息,数据库有哪些表,是什么存储引擎等等。常用字段:

字段名 含义 备注
SCHEMA_NAME 数据库名
TABLE_NAME 表名
TABLE_TYPE 表的类型 类型有BASE TABLE、VIEW、SYSTEM VIEW
ENGINE 存储引擎
CREATE_TIME 建表时间

等同命令:SHOW TABLES

3、COLUMNS
提供字段的信息,有哪些字段字段类型是什么等等。常用字段:

字段名 含义 备注
SCHEMA_NAME 数据库名
TABLE_NAME 表名
COLUMN_NAME 字段名
COLUMN_TYPE 字段类型 如int(10),varchar(250)

等同命令:SHOW COLUMNS 或者 desc tctest.emp 看emp表的具体字段。

4、STATISTICS
这张表的单词是统计的意思,但是却是索引的信息,真奇怪。常用字段:

字段名 含义 备注
SCHEMA_NAME 数据库名
TABLE_NAME 表名
INDEX_SCHEMA 也是数据库名
INDEX_NAME 索引名
COLUMN_NAME 字段名
INDEX_TYPE 索引类型 一般是BTREE

等同命令:SHOW INDEX

5、TABLE_CONSTRAINTS
提供约束情况,我们想看看表有哪些约束?约束指的是唯一性约束、主键约束、外键约束。常用字段:

字段名 含义 备注
CONSTRAINT_SCHEMA 数据库名
CONSTRAINT_NAME 约束名
TABLE_SCHEMA 也是数据库名
TABLE_NAME 表名
CONSTRAINT_TYPE 约束类型 UNIQUE、PRIMARY KEY、FOREIGN KEY

唯一约束和主键约束,我们在前面的索引中一样可以查到。

6、KEY_COLUMN_USAGE
有STATISTICS和TABLE_CONSTRAINTS表,为什么还需要KEY_COLUMN_USAGE?
因为外键时没有指出参考的是哪张表的哪个字段!常用字段:

字段名 含义 备注
CONSTRAINT_SCHEMA 数据库名
CONSTRAINT_NAME 约束名 PRIMARY或列名或外键名
TABLE_SCHEMA 也是数据库名
TABLE_NAME 表名
COLUMN_NAME 列名
REFERENCED_TABLE_SCHEMA 参考的数据库
REFERENCED_TABLE_NAME 参考的表
REFERENCED_COLUMN_NAME 参考的列

相比前面两个,KEY_COLUMN_USAGE这个表的信息是最全的。包括主键、外键、唯一约束。

7、ROUTINES
routines是程序的意思,在MySQL当然指的是函数和存储过程

字段名 含义 备注
SPECIFIC_NAME 程序名
ROUTINE_SCHEMA 数据库名
ROUTINE_NAME 程序名
ROUTINE_TYPE 程序类型 PROCEDURE或FUNCTION
ROUTINE_BODY 函数体 好像都是SQL
ROUTINE_DEFINITION 具体的程序语句

并没有show ROUTINES语句。

8、VIEWS
查询数据库下所有的视图

字段名 含义 备注
TABLE_SCHEMA 数据库名
TABLE_NAME 表名
VIEW_DEFINITION 视图定义语句

9、TRIGGERS
查询所有的触发器

字段名 含义 备注
TRIGGER_SCHEMA 数据库名
TRIGGER_NAME 触发器名
EVENT_OBJECT_SCHEMA 触发的数据库
EVENT_OBJECT_TABLE 触发的表
ACTION_STATEMENT 触发的语句
ACTION_TIMING 触发时机 BEFORE或AFTER

等同命令:show triggers from tctest

10、其他表
ENGINES:列举了当前数据库对InnoDB、MEMORY、MyISAM等各种存储引擎的支持情况。等同show ENGINES
GLOBAL_VARIABLES:服务器变量设置,一些开关和设置。等同命令show global variables。除了global还有session。
PLUGINS:MySQL的插件列表。可以看到存储引擎InnoDB甚至binlog都是插件!binlog是强制加载的,InnoDB是默认打开的。等同命令show PLUGINS
PROCESSLIST:查看正在运行的线程!比如我查这个表,就看到一个查询的线程。等同命令show full processlist

四、是表还是视图?

文档说information_schema下的表不是基本表,而是视图。但是在VIEWS中查不到,在TABLES中能查到这些表,表类型是SYSTEM VIEW。存储引擎使用的是MEMORY或MyISAM。
使用show命令

show create table information_schema.`TABLES`;

可以看到创建的是临时表,存储引擎是MEMORY

CREATE TEMPORARY TABLE `TABLES`(
)ENGINE=MEMORY

五、show命令还是select语句

show命令更简便,有时也能达到相同目的。但是输出格式已固定,select表的结果更完善,符合SQL标准。

六、Oracle中有information_schema吗?

没有实践过,但是平时使用Oracle时没有见到过这个库。官方的FAQ给出了结果:

F:What is the difference between the Oracle Data Dictionary and MySQL INFORMATION_SCHEMA?

A:Both Oracle and MySQL provide metadata in tables. However, Oracle and MySQL use different table names and column names. The MySQL implementation is more similar to those found in DB2 and SQL Server, which also support INFORMATION_SCHEMA as defined in the SQL standard.

大意是DB2和SQL Server都支持information_schema,Oracle有元数据表,但是列名和表名不一样。

MySQL元数据库——information_schema相关推荐

  1. (转)【mysql元数据库】使用information_schema.tables查询数据库和数据表信息 ---数据记录大小统计...

    转:https://www.cnblogs.com/ssslinppp/p/6178636.html https://segmentfault.com/q/1010000007268994?_ea=1 ...

  2. MySQL 之 information_schema

    一.information_schema简介 在MySQL中,把 information_schema 看作是一个数据库,确切说是信息数据库.其中保存着关于MySQL服务器所维护的所有其他数据库的信息 ...

  3. mysql中information_schema说明

    mysql中information_schema说明 https://www.cnblogs.com/lyftest/p/8034470.html原文地址 1.information_schema说明 ...

  4. 【整理】mysql中information_schema.tables字段说明

    [整理]mysql中information_schema.tables字段说明 2016-05-04 16:47:50|  分类: 默认分类|举报|字号 订阅 下载LOFTER 我的照片书  | 1. ...

  5. mysql数据库元表_mysql中元数据库information_schema学习之TABLES表

    在information_schema数据库中的表都只是只读的,不能进行更新.删除和插入操作,也不能加触发器,因为它们实际只是一个视图,不是基本表,没有关联的文件. 在information_sche ...

  6. mysql information schema_[MySql技术]MySQL中information_schema是什么

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

  7. MySQL的information_schema

    在一次清空一张比较大的表时(在清空前占用400多兆),发现该表中记录为0条但是空间并没有被释放,采用下面方式可查看占用情况 -- 查询各个数据库占用磁盘的情况 select TABLE_SCHEMA, ...

  8. MySQL中information_schema

    来源:http://hi.baidu.com/starsw001/item/d151bd591cfb7f01e7c4a557 大家在安装或使用MYSQL时,会发现除了自己安装的数据库以外,还有一个in ...

  9. mysql数据库information_schema库中的表说明

    过去我们常用命令 show databases show tables show processlist 其实这些都是来自于information_schema.当我开始了解information_s ...

最新文章

  1. 影响Lucene索引速度原因以及提高索引速度技巧
  2. 根据当前时间获取本周,下周,上周日期
  3. Makefile:条件编译
  4. 《机器学习实战》chapter06 支持向量机
  5. Python学习笔记:Day5 编写web框架
  6. java字节码常量池_java字节码常量池处理说明
  7. 96. 不同的二叉搜索树
  8. 为什么实验是领英 DNA 的核心部分?
  9. java连接mysql数据库 R,java连接MySql数据库!
  10. iOS开发学无止境 - 只会左键断点?是时候试试这样那样断点了
  11. [转载]心存高远 方能获得成功
  12. swift 系统自带的约束使用
  13. ANdroid的QQ分享接入,android 集成QQ互联 (登录,分享)
  14. 综述类论文怎么写引言和结语?
  15. 网络术语大扫盲2007版
  16. 2014年第五届蓝桥杯C/C++程序设计本科B组省赛 史丰收速算(代码填空)
  17. 从卡牌类游戏初探游戏服务器
  18. 荣耀8更改微信提示音
  19. 【STL】C++ STL超全总结
  20. Depmap分析、可视化CCLE数据

热门文章

  1. P5787 二分图 /【模板】线段树分治
  2. 【CF113D】Museum【概率期望】【高斯消元】
  3. P1829 [国家集训队]Crash的数字表格 / JZPTAB
  4. 最长公共上升子序列(LCIS)
  5. CodeForces - 1189B Number Circle
  6. [SCOI2015]小凸玩矩阵 (匈牙利+二分)
  7. JoyOI(TYVJ)1061-Mobile Service【线性dp】
  8. AtCoder Beginner Contest 179 总结
  9. 【树链剖分】软件管理(luogu 2146/金牌导航 树链剖分-2)
  10. Javafx的WebEgine执行window对象设置属性后为undefined