MySQL元数据库——information_schema

转自: 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有元数据表,但是列名和表名不一样。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/330056.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

mysql 表字段信息从一张表迁移到另一张表_MySQL(数据库)笔记

###数据库之前通过流去操作文件保存数据库的弊端:1.执行效率低2.开发成本高3.一般只能保存小量数据4.只能保存文本数据####什么是DB- DataBase 数据库:代表文件集合####什么是DBMS- DataBaseManagementSystem 数据库管理系统(软件),用于管理保存数据的文件集合,用于和程序员进行…

GET与POST传递数据的最大长度能够达到多少

各种web开发语言中,各个页面之间基本都会进行数据的传递,web开发里面比较常用的数据传递方式有get post,一直以来我都只知道get传递的数据量要比post传递的数据量要少,所以传递大数据量还是要用post,但是 get post 这两…

maven命令实战

【1】 创建maven项目 1)目录结构 mavenhello09|---src|---|---main|---|---|---java|---|---|---resources|---|---test|---|---|---java|---|---|---resources|---pom.xml 目录结构说明: main/java:主程序;main/resources&…

Mac 环境变量配置

环境变量配置 cd ~ (回到主目录home)如果你是第一次配置环境变量,可以使用“touch .bash_profile” 创建一个.bash_profile的隐藏配置文件vim .bash_profile,写入相应的环境变量,如下: # golang配置 export GOROOT/usr/local/Ce…

python测试开发面试题_python测试开发面试之深浅拷贝

先来道题热热身 a (a, b,c) c copy.copy(a) d copy.deepcopy(a) if c d: print("c和d的值相等") if id(c) id(d): print("c和d的地址相等") 想想最后打印的是什么? 什么是深拷贝和浅拷贝 深拷贝,就是在对某个对象进行拷贝的时候…

linux虚拟机tomcat上部署web项目的常用命令

1)查看 tomcat是否在运行 ps -ef | grep tomcat ps -ef 补充:Linux中的ps命令是Process Status的缩写,ps命令用来列出系统中当前运行的那些进程。ps命令可以列出当前进程的运行情况(状态、时间等信息)。在Linux系统中…

一文理清Cookie、Session、Token

发展史 1、很久很久以前,Web 基本上就是文档的浏览而已, 既然是浏览,作为服务器, 不需要记录谁在某一段时间里都浏览了什么文档,每次请求都是一个新的HTTP协议, 就是请求加响应, 尤其是我不用记…

python中debug有什么用途_史上最方便的Python Debug工具

最近在github上冒出了一个python的debug神器PySnooper,号称在debug时可以消灭print。那么该工具有哪些优点呢,如何使用该工具呢。本文就介绍该工具的优缺点和使用方式。 前言 使用python开发过程中,总是避免不了debug。传统的debug过程大致分…

能力陷阱总结

【readme】 本文总结于《能力陷阱》,感觉非常不错,有兴趣的朋友可以看下; 【1】领导者的能力陷阱 1)改变思想从行动开始; 改变做事方式,然后才能改变自己的思考方式; 2)要先在行…

Java HashMap 遍历方式性能探讨

转载自 Java HashMap 遍历方式性能探讨关于HashMap的实现这里就不展开了,具体可以参考JDK7与JDK8中HashMap的实现JDK8之前,可以使用keySet或者entrySet来遍历HashMap,JDK8中引入了map.foreach来进行遍历。原因:keySet其实是遍历了…

Raft共识算法

前提条件 Raft不考虑拜庭将军问题,即消息会延迟、丢失但不会错误。 Raft的特性 Strong leader:在 Raft 中,日志条目(log entries)只从 leader 流向其他服务器。 这简化了复制日志的管理,使得 raft 更容易…

直方图 帕累托图_如何发现现象背后的关键因素?帕累托图,质量管理的利器...

大家好:无论在日常生活还是工作中,都会发生一些事情或者结果,是我们不希望发生的。我们也希望从根本上解决掉,但有时候却无从下手,比如本来打算用来看书的时间不知道去哪里了;本来打算存款的钱也不知道去哪…

centos8上安装nginx

参考自 https://www.jianshu.com/p/9b2dd37a5af9 ; 【1】安装步骤 step1)安装nginx sudo yum install -y nginx step2)启动nginx服务 -- 开机自启动 sudo systemctl enable nginx -- 开启nginx 服务 sudo systemctl start nginx step3&am…

简单分析KafKa工作原理

架构图 Producer:Producer即生产者,消息的产生者,是消息的入口。 kafka cluster: Broker:Broker是kafka实例,每个服务器上有一个或多个kafka的实例,我们姑且认为每个broker对应一台服务器。每…

Java7/8 中的 HashMap 和 ConcurrentHashMap 全解析

转载自 Java7/8 中的 HashMap 和 ConcurrentHashMap 全解析网上关于 HashMap 和 ConcurrentHashMap 的文章确实不少,不过缺斤少两的文章比较多,所以才想自己也写一篇,把细节说清楚说透,尤其像 Java8 中的 ConcurrentHashMap&#…

kali mysql停止服务器_MySQL 的主从复制(高级篇)

首先要明白为什么要用 mysql 的主从复制:1–在从服务器可以执行查询工作 (即我们常说的读功能),降低主服务器压力;(主库写,从库读,降压)2–在从主服务器进行备份,避免备份期间影响主…

centos8安装并启动tomcat9

【1】 步骤如下 step1) 下载tomcat9 step2)centos8 输入 rz命令,把tomcat9 压缩包上传到centos8 没有rz命令, 安装使用 yum -y install lrzsz step3)压缩包解压到tomcat9 step4)配置jdk环境 vim /et…

unity 3d shaderlab 开发实战详解_vue实战开发011:使用router-view嵌套路由详解

前面已经把首页的顶部header和底部的footer页面写完,现在开始写内容区域了,在写内容之前我们先要将路由配置好,不然无法在页面上查看效果,所以这里我在components目录下先建了一个home.vue文件,里面简单的写了一句“我…

go 语言 error 处理的最佳实践

今天分享 go 语言 error 处理的最佳实践,了解当前 error 的缺点、妥协以及使用时注意事项。文章内容较长,干货也多,建议收藏 什么是 error 大家都知道 error[1] 是源代码内嵌的接口类型。根据导出原则,只有大写的才能被其它源码…

请求nginx静态资源报403

【README】 请求nginx静态资源报403; 【1】原因 静态资源防止在某个家目录下,如 /root 目录下 【2】 解决方法1 nginx.conf 文件没有指定用户 # user nobody 修改为 user root; # 设置为root用户 ; 【例子】 user root; #使用r…