MySQL元数据库——information_schema
平时使用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的更多相关文章
- (转)【mysql元数据库】使用information_schema.tables查询数据库和数据表信息 ---数据记录大小统计
转:https://www.cnblogs.com/ssslinppp/p/6178636.html https://segmentfault.com/q/1010000007268994?_ea=1 ...
- MySQL中INFORMATION_SCHEMA是什么?(1)
在获取自增ID时,我用到了以下语句: select auto_increment from information_schema.tables where table_name = "表名& ...
- mysql系统库INFORMATION_SCHEMA,MySQL,TEST,mysql系统表的作用
本文简要说明了MySQL数据库安装好后自带的INFORMATION_SCHEMA,MySQL,TEST三个数据库的用途. 第一个数据库INFORMATION_SCHEMA: 提供了访问数据库元数据的方 ...
- 【整理】mysql中information_schema.tables字段说明
[整理]mysql中information_schema.tables字段说明 2016-05-04 16:47:50| 分类: 默认分类|举报|字号 订阅 下载LOFTER我的照片书 | ...
- MySQL中information_schema 数据库 是干什么的
MySQL中information_schema是什么 大家在安装或使用MYSQL时,会发现除了自己安装的数据库以外,还有一个information_schema数据库. information_sc ...
- [linux][mysql] MySQL中information_schema是什么
来源:MySQL中information_schema是什么 information_schema数据库是MySQL自带的,information_schema提供了访问数据库元数据的方式.这就是?元 ...
- 【mysql元数据库】使用information_schema.tables查询数据库和数据表信息
概述 对于mysql和Infobright等数据库,information_schema数据库中的表都是只读的,不能进行更新.删除和插入等操作,也不能加触发器,因为它们实际只是一个视图,不是基本表,没 ...
- MySQL中INFORMATION_SCHEMA是什么?(2)
information_schema数据库表说明: SCHEMATA:提供了当前mysql实例中所有数据库的信息.是show databases的结果取之此表. TABLES:提供了关于数据库中的表的 ...
- Mysql之INFORMATION_SCHEMA解析1
INFORMATION_SCHEMA库是Mysql提供的一个系统库,保存了数据库的原数据,方便用户监控与管理Msyql. 现在单说与INNODB相关的库:INNODB_SYS_TABLES,INNOD ...
随机推荐
- php审核操作
注册页面zhuce.php <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http ...
- HTML文档及标签介绍
HTML标签 HTML 标记标签通常被称为 HTML 标签 (HTML tag). HTML标签是由尖括号包含的关键词,比如<html> HTML标签通常是成对出现的,比如<body ...
- windows 安装 Scrapy的套路
我最近在琢磨scrapy爬虫框架,在windows中安装scrapy遇到了不少坑:直接 pip install scrapy 安装不成功的,百度说要安装vc2008+等等,安装这些时间太长,最后找到一 ...
- 安装Apache遇到的一点问题
很久以前就安装好了Apache(2.2),现在再用时突然出现了问题: 以http://127.0.0.1/exercise/x.php的方式访问文件是正常的,但是要进入phpMyAdmin建表发现不能 ...
- Overlay网络技术之vxvlan
了解云计算数据中心网络架构的过程中,看到这么一篇不错的关于大二层技术overlay的文章,转载分享给大家! 一. 传统网络面临的问题 随着企业业务的快速扩展需求,IT做为基础设施,快速部署和减少投入成 ...
- XCel 项目总结 - Electron 与 Vue 的性能优化
XCEL 是由凹凸实验室推出的一个 Excel 数据清洗工具,其通过可视化的方式让用户轻松地对 Excel 数据进行筛选. XCEL 基于 Electron 和 Vue 2.0 进行开发,充分利用 E ...
- .Net程序员学用Oracle系列(20):层次查询(CONNECT BY)
1.层次查询语句 1.1.CONNECT BY 语法 1.2.CONNECT BY 示例 2.层次查询函数 2.1.SYS_CONNECT_BY_PATH 2.2.WMSYS.WM_CONCAT 2. ...
- java关于map用来筛选的用法
我有一个实体 PropTemplateItem{id,名称,父节点,模版id},父节点为root是定义为根节点. 例如数据: 001,颜色,root,123 002,白色,001,123 003,红色 ...
- cordova crosswalk android 7.0 问题
带有crosswalk的cordova app 在Android7.0会闪退问题,为什么要crosswalk,我的回答是,还tmd不是要兼容5.0以下系统(4.4,4.2,4.0),这里省略100 ...
- 解决input的回车enter和失焦blur冲突问题:实现回车保存,blur还原编辑内容功能
最近做项目遇到: 背景:点击单元格,easyUI自动生成input可编辑框. 问题点:input的回车enter和失焦blur冲突问题:实现回车保存,blur还原编辑内容功能 要实现需求: 1.回车键 ...