元数据--MySQL获取元数据的方法

元数据:数据的数据,用以描述数据的信息也是数据,被称为元数据

[MySQL]获取元数据的方法

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

1)show语句

2)从INFORMATION_SCHEMA数据库里查询相关表(information_schema是一个虚拟数据库,并不物理存在,它储存数据的信息的数据库)

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

--用SHOW语句获取元数据

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

[sql]

show databases;  --列出所有数据库

show create database db_name;  --查看数据库的DDL

show tables; --列出默认数据库的所有表

show tables from db_name;  --列出指定数据库的所有表

show table status;  --查看表的描述性信息

show table status from db_name;

show create table tbl_name;  --查看表的DDL

show columns from tbl_name;  --查看列信息

show index from tbl_name;  --查看索引信息

有几种show语句还可以带有一条like ‘pattern‘字句,用来限制语句的输出范围,其中‘pattern‘允许包含‘%‘和‘_‘通配符,比如下面这条语句返回domaininfo表中以s开头的所有列:

[sql]

show columns from domaininfo like ‘s%‘;

像上面这张支持like字句的所有show都可以改写成一条where字句,如:

[sql]

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]

mysqlshow  --列出所有数据库

mysqlshow db_name  --列出给定数据库的所有表

mysqlshow db_name tbl_name  --列出给定数据库表的所有列

mysqlshow --keys db_name tbl_name  --列出索引信息

mysqlshow --status db_name  --列出数据库的描述性信息

mysqldump可以让你看到create table语句(就想show create table语句一样),如:

[sql]

mysqldump --no-data db_name [tbl_name] ...

*注意:在用mysqldump查看表结构时,一定要加上--no-data,否则你看到的将是数据库表里的数据。

--MySql数据库信息information_schema的查询使用

从MySQL 5开始, 你可以看到多了一个系统数据库information_schema . information_schema 存贮了其他所有数据库的信息。让我们来看看几个使用这个数据库的例子:

<!--more-->

1. 取得关于 information_schema的基本信息

information_schema是一个虚拟数据库,并不物理存在,在select的时候,从其他数据库获取相应的信息。

mysql> show databases;

+--------------------+

| Database           |

+--------------------+

| information_schema |

| bugs               |

| mysql              |

| sugarcrm           |

+--------------------+

4 rows in set (0.00 sec)

以下是information_schema数据库中的表.

mysql> use information_schema;

mysql> show tables;

+---------------------------------------+

| Tables_in_information_schema          |

+---------------------------------------+

| CHARACTER_SETS                        |

| COLLATIONS                            |

| COLLATION_CHARACTER_SET_APPLICABILITY |

| COLUMNS                               |

| COLUMN_PRIVILEGES                     |

| KEY_COLUMN_USAGE                      |

| PROFILING                             |

| ROUTINES                              |

| SCHEMATA                              |

| SCHEMA_PRIVILEGES                     |

| STATISTICS                            |

| TABLES                                |

| TABLE_CONSTRAINTS                     |

| TABLE_PRIVILEGES                      |

| TRIGGERS                              |

| USER_PRIVILEGES                       |

| VIEWS                                 |

+---------------------------------------+

17 rows in set (0.00 sec)

2. 查询表中数据超过1000行的表

以下的语句可以查出超过1000行数据的表

mysql> select concat(table_schema,‘.‘,table_name) as table_name,table_rows

-> from information_schema.tables where table_rows > 1000

-> order by table_rows desc;

+----------------------------------+------------+

| table_name                       | table_rows |

+----------------------------------+------------+

| bugs.series_data                 |      52778 |

| bugs.bugs_activity               |      26436 |

| bugs.longdescs                   |      21473 |

| bugs.email_setting               |       5370 |

| bugs.attachments                 |       4714 |

| bugs.attach_data                 |       4651 |

| bugs.cc                          |       4031 |

| bugs.bugs                        |       2190 |

| bugs.namedqueries_link_in_footer |       1228 |

+----------------------------------+------------+

9 rows in set (0.04 sec)

3. 查询所有没有主键的表

This example gives a list of all the tables without primary key.

SELECT CONCAT(t.table_name,".",t.table_schema) as table_name

FROM information_schema.TABLES t

LEFT JOIN information_schema.TABLE_CONSTRAINTS tc

ON t.table_schema = tc.table_schema

AND t.table_name = tc.table_name

AND tc.constraint_type = ‘PRIMARY KEY‘

WHERE tc.constraint_name IS NULL

AND t.table_type = ‘BASE TABLE‘;

4. 实现表的历史数据information_schema

Putting the MySQL information_schema to Use article implements a history database using the information schema. The first half of this article describes the requirements for the history database, and a generic design to implement it. The second half describes the stepwise construction of code-generator that creates the SQL to construct and load the history database. The code-generator is driven by the information schema and some features of the information schema are discussed in detail.

5. 查询5个最大表

mysql> SELECT concat(table_schema,‘.‘,table_name) table_name,

-> concat(round(data_length/(1024*1024),2),‘M‘) data_length

-> FROM information_schema.TABLES

-> ORDER BY data_length DESC LIMIT 5;

+--------------------+-------------+

| table_name         | data_length |

+--------------------+-------------+

| bugs.attach_data   | 706.89M     |

| bugs.longdescs     | 3.45M       |

| bugs.bugs_activity | 1.45M       |

| bugs.series_data   | 0.75M       |

| bugs.attachments   | 0.51M       |

+--------------------+-------------+

5 rows in set (0.05 sec)

时间: 2024-10-28 21:51:11

元数据--MySQL获取元数据的方法的相关文章

PHP从mysql获取数据的方法

1 <?php 2 require "database.php"; 3 //读取数据库中的数据 4 $sql_1 = "SELECT * FROM test_table"; 5 $result = $db_conn->query($sql_1); 6 while ( $row = mysqli_fetch_assoc($result) ) {//此处不能使用foreach 7 var_dump($row); 8 echo "<hr>

mysql 获取执行计划的方法

mysql 获取执行计划方法:1.通过explain进行查看sql的执行计划:2.通线程正在执行的sql查看该sql的执行计划: explain进行查看sql的执行计划相对简单,其实通线程正在执行的sql查看执行计划也很简单,那么为什么还需要第二种方式呢? 因为日常工作会发现很多sql一直在执行,执行发生异常,如果把该sql拿出来执行又很快,于是我们想获取该sql执行异常时候的执行计划,同时因为数据在时刻的变化,统计信息也有可能变化,有可能导致执行计划发生改变,好在mysql5.7开始已经可以通

【转】JDBC学习笔记(5)——利用反射及JDBC元数据编写通用的查询方法

转自:http://www.cnblogs.com/ysw-go/ JDBC元数据 1)DatabaseMetaData /** * 了解即可:DatabaseMetaData是描述数据库的元数据对象 * 可以由Connection得到 */ 具体的应用代码: 1 @Test 2 public void testDatabaseMetaData(){ 3 Connection connection=null; 4 ResultSet resultSet=null; 5 try { 6 conne

Java -- JDBC_利用反射及 JDBC 元数据编写通用的查询方法

先利用 SQL 进行查询,得到结果集: 利用反射创建实体类的对象:创建对象: 获取结果集的列的别名: 再获取结果集的每一列的值, 结合 3 得到一个 Map,键:列的别名,值:列的值: 再利用反射为 2 的对应的属性赋值:属性即为 Map 的键,值即为 Map 的值. 使用 JDBC 驱动程序处理元数据 Java 通过JDBC获得连接以后,得到一个Connection 对象,可以从这个对象获得有关数据库管理系统的各种信息,包括数据库中的各个表,表中的各个列,数据类型,触发器,存储过程等各方面的信

JDBC学习笔记——利用反射及JDBC元数据编写通用的查询方法

我们的查询操作,对于不同的数据表examstudent和customers,会有不同的代码编写过程,利用反射和JDBC元数据可以编写通用的方法进行对不同数据表的查询. 在此之前我们是这样做的: 查询customers表中的字段以及字段值: 1 public Customer getCustomer(String sql, Object... args) { 2 Customer customer = null; 3 Connection connection = null; 4 Prepared

javaWeb_JDBC_利用反射以及JDBC元数据编写通用的查询方法

JDBC利用反射以及元数据编写通用的查询方法[*****] 1.如何获取元数据 Java 通过JDBC获得连接以后,得到一个Connection 对象,可以从这个对象获得有关数据库管理系统的各种信息,包括数据库中的各个表, 表中的各个列,数据类型,触发器,存储过程等各方面的信息.根据这些信息,JDBC可以访问一个实现事先并不了解的数据库. 获取这些信息的方法都是在DatabaseMetaData类的对象上实现的,而DataBaseMetaData对象是在Connection对象上获得的. 2.元

mysql获取group by的总记录行数方法

mysql获取group by内部可以获取到某字段的记录分组统计总数,而无法统计出分组的记录数. mysql的SQL_CALC_FOUND_ROWS 使用 获取查询的行数 在很多分页的程序中都这样写: 代码如下 复制代码 SELECT COUNT(*) from `table` WHERE ......; 查出符合条件的记录总数 代码如下 复制代码 SELECT * FROM `table` WHERE ...... limit M,N; 查询当页要显示的数据 这样的语句可以改成: 代码如下 复

Hive集成Mysql作为元数据时,提示错误:Specified key was too long; max key length is 767 bytes

在进行Hive集成Mysql作为元数据过程中,做完所有安装配置工作后,进入到hive模式,执行show databases:执行正常,接着执行show tables:时却报错. 关键错误信息如下: com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Specified key was too long; max key length is 767 bytes) 具体操作信息如下: hive> show databases; OK

mysql 获取季度的第一天 本月的第一天,本周的第一天sql语句(转)

感谢:http://www.111cn.net/database/110/d45124323da8d2d87b80f78319987eda.htm 查看同主题的另一篇博客:http://blog.csdn.net/cleanfield/article/details/41447585 ------------------------------------------------------------------------------ 本季度的第一天 ,然后你可以把字符串再转换为日期. 方法