MySQL提供了以下三种方法用于获取数据库对象的元数据

 

MySQL提供了以下三种方法用于获取数据库对象的元数据:

1)show语句

2)从INFORMATION_SCHEMA数据库里查询相关表

3)命令行程序,如mysqlshow, mysqldump

 

用SHOW语句获取元数据

MySQL用show语句获取元数据是最常用的方法,下面提供了几种典型用法:

[sql] view plain copy
  1. show databases;  --列出所有数据库  
  2. show create database db_name;  --查看数据库的DDL  
  3. show tables; --列出默认数据库的所有表  
  4. show tables from db_name;  --列出指定数据库的所有表  
  5. show table status;  --查看表的描述性信息  
  6. show table status from db_name;  
  7. show create table tbl_name;  --查看表的DDL  
  8. show columns from tbl_name;  --查看列信息  
  9. show index from tbl_name;  --查看索引信息  
  1. show databases; --列出所有数据库
  2. show create database db_name; --查看数据库的DDL
  3. show tables; --列出默认数据库的所有表
  4. show tables from db_name; --列出指定数据库的所有表
  5. show table status; --查看表的描述性信息
  6. show table status from db_name;
  7. show create table tbl_name; --查看表的DDL
  8. show columns from tbl_name; --查看列信息
  9. show index from tbl_name; --查看索引信息
有几种show语句还可以带有一条like 'pattern'字句,用来限制语句的输出范围,其中'pattern'允许包含'%'和'_'通配符,比如下面这条语句返回domaininfo表中以s开头的所有列:

 

 

[sql] view plain copy
  1. show columns from domaininfo like 's%';  
show columns from domaininfo like 's%';
像上面这张支持like字句的所有show都可以改写成一条where字句,如:

 

 

[sql] view plain copy
  1. show columns from domaininfo where field='sysdomain';  
show columns from domaininfo where field='sysdomain';

 

注:desc tbl_name和explain tbl_name的效果和show columns from tbl_name一致。


从INFORMATION_SCHEMA数据库里查询相关表

INFORMATION_SCHEMA是MySQL自带的一个系统数据库,它里面存储了所有的元数据,通过select里面的相关表就可以获取你想要的元数据。和show语句相比,它比较麻烦,但它的好处是标准的SQL语句,更具有可移植性,且更灵活,可以通过各种表达式获取你真正需要的信息。

 

从命令行获取元数据

前面两种方法都必须得在MySQL命令行里执行,而mysqlshow和mysqldump提供了从OS命令行获取元数据库的方法,如:
[plain] view plain copy
  1. mysqlshow  --列出所有数据库  
  2. mysqlshow db_name  --列出给定数据库的所有表  
  3. mysqlshow db_name tbl_name  --列出给定数据库表的所有列  
  4. mysqlshow --keys db_name tbl_name  --列出索引信息  
  5. mysqlshow --status db_name  --列出数据库的描述性信息  
  1. mysqlshow --列出所有数据库
  2. mysqlshow db_name --列出给定数据库的所有表
  3. mysqlshow db_name tbl_name --列出给定数据库表的所有列
  4. mysqlshow --keys db_name tbl_name --列出索引信息
  5. mysqlshow --status db_name --列出数据库的描述性信息
mysqldump可以让你看到create table语句(就想show create table语句一样),如:
[sql] view plain copy
  1. mysqldump --no-data db_name [tbl_name] ...  
mysqldump --no-data db_name [tbl_name] ...
注意:在用mysqldump查看表结构时,一定要加上--no-data,否则你看到的将是数据库表里的数据。

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`;
  • 1

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

CREATE TEMPORARY TABLE `TABLES`( )ENGINE=MEMORY
  • 1
  • 2

 

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

转载于:https://www.cnblogs.com/pejsidney/p/9481153.html

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

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

相关文章

laravel 5.1 php版本号,发行版本说明 | 序言 | Laravel 5.1 中文文档

发行版本说明由 学院君 创建于5年前, 最后更新于 11个月前版本号 #219641 views23 likes0 collects支持政策LTS版本,比如Laravel 5.1,将会提供两年的bug修复和三年的安全修复支持。这些版本将会提供最长时间的支持和维护。对于其他通用版本,只…

NYOJ-522 Interval

Interval 时间限制&#xff1a;2000 ms | 内存限制&#xff1a;65535 KB难度&#xff1a;4描述There are n(1 < n < 100000) intervals [ai, bi] and m(1 < m < 100000) queries, -100000 < ai < bi < 100000 are integers.Each query contains an inte…

实现图书增删的代码_不仅仅是图书信息管理系统

点击蓝字 关注我们不仅仅是图书信息管理系统基于双链表&#xff0c;采用面向对象编程方法制作的图书管理系统❞效果演示root用户&#xff1a;账号&#xff1a;0&#xff0c;密码&#xff1a;0普通用户&#xff1a;账号&#xff1a;1001&#xff0c;密码&#xff1a;666666图书信…

HDU1846 - Brave Game【巴什博弈】

十年前读大学的时候&#xff0c;中国每年都要从国外引进一些电影大片&#xff0c;其中有一部电影就叫《勇敢者的游戏》&#xff08;英文名称&#xff1a;Zathura&#xff09;&#xff0c;一直到现在&#xff0c;我依然对于电影中的部分电脑特技印象深刻。 今天&#xff0c;大家…

Ubuntu18.04换源更新国内源

参考&#xff1a;Ubuntu18.04更新国内源 作者&#xff1a;一只青木呀 发布时间&#xff1a;2020-08-05 10:24:11 网址&#xff1a;https://blog.csdn.net/weixin_45309916/article/details/107808268 树莓派换源博文&#xff1a;https://blog.csdn.net/zhuguanlin121/article/d…

php中解析数组,在PHP中解析多维数组

您应该在将数据解析为Smarty之前准备好数据。你可以这样做&#xff1a;$result array(array(name > Hockey Team 1, category_id > 1),array(name > Hockey Team 2, category_id > 2),array(name > Hockey Team 3, category_id > 3),array(name > Footba…

了解jQuery并掌握jQuery对象和DOM对象的区别

jQuery的优势&#xff1a; 开源--开放源代码 轻量级 强大的选择器 出色的DOM操作(对DOM元素的一个增删改查) 完善的Ajax&#xff0c;出色的浏览器兼容性&#xff0c;丰富的插件支持&#xff0c;完善的文档&#xff08;说明书&#xff09; 链式操作方式&#xff0c; 写得少&…

linux下复制

复制文件 cp - i file tofile 复制目录 cp - r dic todic转载于:https://www.cnblogs.com/Hero-Qiang/archive/2013/03/20/2971579.html

rh php56 php,在全球范围内提供RHSCL PHP的最佳方法

我使用以下网址安装了RHSCL 2&#xff1a;使用RedHat订阅管理器.然后我运行yum删除php *,然后是yum install rh-php56一切顺利,除非现在找不到PHP.然后我运行find / -name php并在以下目录中找到rh-php56&#xff1a;/var/opt/rh/rh-php56/lib/php/opt/rh/rh-php56/register.co…

Vmware15的安装(ps解决:重装Vmware出现无法安装服务Vmware Authorization Service)

参考&#xff1a;Linux之Vmware的安装 作者&#xff1a;一只青木呀 发布时间&#xff1a; 2020-07-09 22:13:14 网址&#xff1a;https://blog.csdn.net/weixin_45309916/article/details/107238658 目录1.前言2.打开Vmware虚拟机安装包安装解决&#xff1a;重装Vmware出现无法…

python多线程模块_python 多线程模块参考

threading.active_count() 返回当前处于 active 状态的线程的数目 threading.current_thread() 返回调用者当前的 Thread 对象 threading.get_ident() 返回当前线程的“thread identifier”属性&#xff08;3.3新增&#xff09; threading.enumerate() 返回当前处于 active 状态…

谈谈即时通讯开发平台

由于即时通讯系统的复杂性和对服务器稳定性的很高要求&#xff0c;一般即时通讯系统开发至少需要1年左右的时间&#xff0c;而这还只是测试版&#xff0c;离"稳定"还有一定距离&#xff0c;而这时匆匆上马的不稳定的系统会让你失去用户&#xff0c;您也不可能召集上万…

内存,RAM(DDR),ROM(EEPROM、flash),存储卡(emmc,sd,tf)以及Cache的区别与联系

参考&#xff1a;内存&#xff0c;RAM&#xff0c;ROM&#xff0c;Cache的区别与联系 作者&#xff1a;一只青木呀 发布时间&#xff1a;2020-09-26 09:55:40 网址&#xff1a;https://blog.csdn.net/weixin_45309916/article/details/108808106 参考&#xff1a;EEPROM和flash…

PHP数据库可视化分析工具,5个MySQL GUI工具推荐,帮助你进行数据库管理

MySQL的数据库管理工具非常多&#xff0c;有哪些优秀的GUI工具可以帮助提高工作效率?不妨看一看这5个MySQL GUI工具。1、Navicat for MySQLNavicat for MySQL是数据库管理工具&#xff0c;与MySQL&#xff0c;MariaDB和云数据库兼容&#xff0c;是目前非常受欢迎的数据库前端用…

idea 项目jar反编译java_带你上手阿里开源的 Java 诊断利器:Arthas

本文适合有 Java 基础知识的人群。本文作者&#xff1a;HelloGitHub-秦人HelloGitHub 推出的《讲解开源项目》系列&#xff0c;今天给大家带来一款阿里开源的 Java 诊断利器 Arthas 项目—— Arthas项目源码地址&#xff1a;https://github.com/alibaba/arthas一、简介 为什么要…

22Java之JDBCTemplate总结

写在前面&#xff1a;这里总结4种方式来操作数据库&#xff08;SE阶段&#xff09; 一、JDBC JDBC有关的类&#xff1a;都在java.sql 和 javax.sql 包下.1.数据准备 这里假设已经在数据库中新建立了mydb4数据库&#xff0c;并且也插入了一些数据&#xff0c;并且还需要导入一个…

福布斯评科技未来五大趋势:电脑消失融入生活时间

福布斯评科技未来五大趋势&#xff1a;电脑消失融入生活时间 谈趋势似乎并不讨巧&#xff0c;因为所谓趋势通常都是指时尚。每每谈及趋势&#xff0c;人们立刻就会想到穿着夸张服饰在T台上昂首阔步的模特&#xff0c;但每当下一季的新款推出&#xff0c;再华丽的时装都会很快…

Windows如何开启虚拟化,以安装虚拟机?

参考&#xff1a;Windows如何开启虚拟化&#xff0c;以安装虚拟机&#xff1f; 作者&#xff1a;一只青木呀 发布时间&#xff1a;2020-08-28 20:58:45 网址&#xff1a;https://blog.csdn.net/weixin_45309916/article/details/108286787 设置BIOS 安装 Ubuntu 时报错&#x…

php生成文件index.html,Typecho生成静态首页index.html文件

Typecho生成静态首页index.html文件作者&#xff1a;佚名来源&#xff1a;爱好者时间&#xff1a;2019-11-02在挨踢路看到的教程&#xff0c;不仅仅适用于Typecho&#xff0c;wordpress也是可以通用。教程在网站根目录新建文件f5.php然后里面写入下面的代码。$nowtimetime();$p…

python语言1002python语言_PYTHON语言学习

PYTHON 语言学习 通过两个星期的自学 python 语言&#xff0c;初步了解到 python 的知识构架。它比 C 语言和 C 语 言在某种程度上来说要简单些&#xff0c; 但是也有很多我不懂的东西。 陈老师给我安排的课堂任务是 第 21 章的 Database Programming &#xff0c;通过 python …