`
liss
  • 浏览: 844113 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

如何查看mysql的元数据

阅读更多
创建了很多的存储过程了,他们也都保存在mysql数据库中,如果我们要查看mysql实际上保存了什么信息,可以有四种方法,两种使用show语句,两种使用select语句,他们的格式如下:
SHOW CREATE PROCEDURE / SHOW CREATE FUNCTION
SHOW PROCEDURE STATUS / SHOW FUNCTION STATUS
SELECT FROM MYSQL.PROC
SELECT FROM INFORMATION_SCHEMA
下面针对以上几种语句举例说明一下。
1、使用show create procedure获得存储过程的信息,和show create table等mysql语法类似,这条语句不返回创建时设定的返回值,而是返回过程的语句信息:
mysql> show create procedure pro1//
+-----------+----------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| Procedure | sql_mode | Create Procedure                                                                                                                                                                          |
+-----------+----------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| pro1      |          | CREATE DEFINER=`root`@`localhost` PROCEDURE `pro1`()
begin
declare x int;
declare y int;
set x=2;
set y=2;
insert into t1(filed) values(a);
select filed * a from t1 where filed >=b;
end |
+-----------+----------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
1 row in set (0.00 sec)
mysql> show create procedure p1//
+-----------+----------+----------------------------------------------------------------------+
| Procedure | sql_mode | Create Procedure                                                     |
+-----------+----------+----------------------------------------------------------------------+
| p1        |          | CREATE DEFINER=`root`@`localhost` PROCEDURE `p1`()
select * from db1 |
+-----------+----------+----------------------------------------------------------------------+
1 row in set (0.00 sec)

2、执行show procedure status,这种方法可以返回更多信息的细节:
mysql> show procedure status like 'pro1'//
+-----+------+-----------+----------------+---------------------+---------------------+---------------+---------+
| Db  | Name | Type      | Definer        | Modified            | Created             | Security_type | Comment |
+-----+------+-----------+----------------+---------------------+---------------------+---------------+---------+
| db1 | pro1 | PROCEDURE | root@localhost | 2010-06-26 10:20:45 | 2010-06-26 10:20:45 | DEFINER       |         |
+-----+------+-----------+----------------+---------------------+---------------------+---------------+---------+
1 row in set (0.00 sec)

mysql> show procedure status like 'p1'//
+-----+------+-----------+----------------+---------------------+---------------------+---------------+---------+
| Db  | Name | Type      | Definer        | Modified            | Created             | Security_type | Comment |
+-----+------+-----------+----------------+---------------------+---------------------+---------------+---------+
| db1 | p1   | PROCEDURE | root@localhost | 2010-06-24 15:52:53 | 2010-06-24 15:52:53 | DEFINER       |         |
+-----+------+-----------+----------------+---------------------+---------------------+---------------+---------+
1 row in set (0.00 sec)

3、使用select可以获得更多的信息
mysql> select * from mysql.proc where name='pro1'//
+-----+------+-----------+---------------+----------+-----------------+------------------+---------------+------------+---------+--------------------------------------------------------------------------------------------------------------------------------------+----------------+---------------------+---------------------+----------+---------+
| db  | name | type      | specific_name | language | sql_data_access | is_deterministic | security_type | param_list | returns | body                                                                                                                                 | definer        | created             | modified            | sql_mode | comment |
+-----+------+-----------+---------------+----------+-----------------+------------------+---------------+------------+---------+--------------------------------------------------------------------------------------------------------------------------------------+----------------+---------------------+---------------------+----------+---------+
| db1 | pro1 | PROCEDURE | pro1          | SQL      | CONTAINS_SQL    | NO               | DEFINER       |            |         | begin
declare x int;
declare y int;
set x=2;
set y=2;
insert into t1(filed) values(a);
select filed * a from t1 where filed >=b;
end | root@localhost | 2010-06-26 10:20:45 | 2010-06-26 10:20:45 |          |         |
+-----+------+-----------+---------------+----------+-----------------+------------------+---------------+------------+---------+--------------------------------------------------------------------------------------------------------------------------------------+----------------+---------------------+---------------------+----------+---------+
1 row in set (0.01 sec)

4、以上三种方式并不是特别的完善,其实最好的方式是select from information_schema。这种方式是“ANSI/ISO标准”的方式完成工作。这是最好的实现方式,其他的方式可能会出现错误。
    在其他的DBMS中,比如SQL server2000,使用information_schema,而只有mysql使用show方式。
    访问mysql.proc的特权是不安全的,因为用户访问information_schema视图的特权,每个用户默认对information_schema数据库有select权限。
    select功能很多,可以计算表达式,分组,排序,产生可以获取信息的结果集,而这些功能show没有。
    所以使用select还是最好的!下面看几个例子,首先使用select information_schema来显示information_schema例程中有哪些列:
mysql> select table_name,column_name,column_type from information_schema.columns where table_name='routines'//
+------------+--------------------+--------------+
| table_name | column_name        | column_type  |
+------------+--------------------+--------------+
| ROUTINES   | SPECIFIC_NAME      | varchar(64)  |
| ROUTINES   | ROUTINE_CATALOG    | varchar(512) |
| ROUTINES   | ROUTINE_SCHEMA     | varchar(64)  |
| ROUTINES   | ROUTINE_NAME       | varchar(64)  |
| ROUTINES   | ROUTINE_TYPE       | varchar(9)   |
| ROUTINES   | DTD_IDENTIFIER     | varchar(64)  |
| ROUTINES   | ROUTINE_BODY       | varchar(8)   |
| ROUTINES   | ROUTINE_DEFINITION | longtext     |
| ROUTINES   | EXTERNAL_NAME      | varchar(64)  |
| ROUTINES   | EXTERNAL_LANGUAGE  | varchar(64)  |
| ROUTINES   | PARAMETER_STYLE    | varchar(8)   |
| ROUTINES   | IS_DETERMINISTIC   | varchar(3)   |
| ROUTINES   | SQL_DATA_ACCESS    | varchar(64)  |
| ROUTINES   | SQL_PATH           | varchar(64)  |
| ROUTINES   | SECURITY_TYPE      | varchar(7)   |
| ROUTINES   | CREATED            | datetime     |
| ROUTINES   | LAST_ALTERED       | datetime     |
| ROUTINES   | SQL_MODE           | longtext     |
| ROUTINES   | ROUTINE_COMMENT    | varchar(64)  |
| ROUTINES   | DEFINER            | varchar(77)  |
+------------+--------------------+--------------+
20 rows in set (0.00 sec)
    格式整齐吧,当我们要看information_schema视图时,从information_schema中select信息,就像从tables和
columns获取一样,获取的是元数据的数据元素。再比如看一下数据库db1中已经定义了多少存储过程:
mysql> select count(*) from information_schema.routines where routine_schema='db1'//
+----------+
| count(*) |
+----------+
|       35 |
+----------+
1 row in set (0.00 sec)
    已经定义了35条。
    Access control for the ROUTINE_DEFINITION column  ROUTINE_DEFINITION列的访问控制
   在INFORMATION_SCHEMA中的ROUTINE_DEFINITION列是由过程或函数组成过程体获得的。这里可能会有一些敏感信息,因此只对过程创建者可见。 
    CURRENT_USER <> INFORMATION_SCHEMA.ROUTINES.DEFINER:如果对它使用SELECT的用户不是创建它的用户,那么mysql将返回NULL值,而不是ROUTINE_DEFINITION列。
    显示过程状态子句中的辅助句子
    既然能够显示information_schema.routines中的列,那么现在可以详细解释一下show procedure status中显示的细节,首先看语法:
    show procedure status[where condition];语句中的条件判断和select语句一样,如果为真,则在输出中返回行,需要注意,在where子句中必须使用information_schema列的名字,在结果中显示show procedure status字段的名字。例如:
mysql> show procedure status where name='pro1'//
+-----+------+-----------+----------------+---------------------+---------------------+---------------+---------+
| Db  | Name | Type      | Definer        | Modified            | Created             | Security_type | Comment |
+-----+------+-----------+----------------+---------------------+---------------------+---------------+---------+
| db1 | pro1 | PROCEDURE | root@localhost | 2010-06-26 10:20:45 | 2010-06-26 10:20:45 | DEFINER       |         |
+-----+------+-----------+----------------+---------------------+---------------------+---------------+---------+
1 row in set (0.00 sec)

mysql> show procedure status where name='p1'//
+-----+------+-----------+----------------+---------------------+---------------------+---------------+---------+
| Db  | Name | Type      | Definer        | Modified            | Created             | Security_type | Comment |
+-----+------+-----------+----------------+---------------------+---------------------+---------------+---------+
| db1 | p1   | PROCEDURE | root@localhost | 2010-06-24 15:52:53 | 2010-06-24 15:52:53 | DEFINER       |         |
+-----+------+-----------+----------------+---------------------+---------------------+---------------+---------+
1 row in set (0.01 sec)
mysql> show procedure status where db='db1'// 这条语句显示了我们所有创建的存储过程,内容在这里我就不列出来了!!

分享到:
评论

相关推荐

    MySQL 元数据查看及实例代码

    MySQL元数据是关于数据库本身的信息,包括查询结果、数据库和数据表的结构以及服务器的状态和配置。这些信息对于数据库管理和应用程序开发至关重要,因为它们提供了关于数据操作的影响、数据库结构和服务器运行状况...

    atlas 的 mysql-bridge.zip

    1. **元数据同步**:MySQL-Bridge 主要负责将 MySQL 数据库的表结构、索引、视图等元数据实时同步到 Atlas 平台,确保 Atlas 中的数据模型与 MySQL 实例保持一致。 2. **变更数据捕获**:除了基础的元数据同步,...

    mysql 导出数据词典word或者html

    在IT行业中,数据库管理是至关重要的,而...总结来说,MySQL的数据词典导出涉及到查询数据库元数据、使用`mysqldump`命令和利用文本转换工具。掌握这一流程,可以帮助数据库管理员更高效地管理和共享数据库结构信息。

    mysql数据字典导出工具.zip

    MySQL数据字典导出工具是专门用于MySQL数据库的管理和维护的一款实用程序,它允许用户方便地导出数据库的元数据,即数据字典信息。数据字典在数据库管理中起着至关重要的作用,因为它存储了关于数据库结构、表、列、...

    mysql数据表直接生成word文档数据字典

    数据字典是数据库管理系统中的一个重要组成部分,它存储了关于数据库的所有元数据(metadata),包括表、列、索引、视图、用户权限等信息。创建数据字典文档有助于理解和管理复杂的数据库结构,提高团队协作效率。 ...

    MySQL Metadata Locking

    ### MySQL元数据锁定详解 #### 引言 MySQL的数据字典长期以来一直是开发者和技术架构师眼中的神秘领域。自MySQL早期版本以来,其设计一直围绕着`.frm`(格式)文件展开,这些文件包含了基础关系表的定义,并且每个...

    MySQL如何查看元数据锁阻塞在哪里

    要查看MySQL中的元数据锁阻塞情况,可以使用几个内部视图和命令。以下是具体步骤和分析方法: 1. 使用`SHOW PROCESSLIST`命令:此命令用于查看当前MySQL服务器上的线程及其状态。如果某个会话处于等待状态(Waiting...

    mysql数据字典生成工具

    这个可执行文件的作用是解析MySQL数据库的元数据,并将这些信息以易于阅读和理解的格式(如HTML或PDF)输出。它通常会收集如表结构、字段类型、索引、外键关系等信息,并生成详细的文档。使用`mysqldoc`,用户可以...

    查看MySQL数据库的命令

    MySQL提供了一个名为INFORMATION_SCHEMA的特殊数据库,其中包含了大量的元数据表。通过查询这些表,可以获取更多关于数据库对象的详细信息。例如,要查看某个表的所有列信息,可以使用以下SQL语句: ```sql ...

    mysql数据字典导出工具

    MySQL数据字典导出工具是一款高效实用的软件,专为数据库管理员和开发人员设计,用于轻松地导出MySQL数据库中的元数据,即数据字典。数据字典在数据库管理中扮演着至关重要的角色,它包含了关于数据库结构、表、列、...

    Mysql数据字典导出工具

    数据字典在数据库系统中扮演着至关重要的角色,它存储了关于数据库结构、表、索引、视图以及权限等元数据信息。通过导出数据字典,用户可以备份这些元数据,方便在系统故障或迁移时恢复,也可以用于分析和优化数据库...

    自动生成mysql的数据字典,保存格式为word

    2. **获取元数据**:使用`DatabaseMetaData`接口获取数据库的元数据,包括表信息、列信息、索引等。例如: ```java DatabaseMetaData metaData = conn.getMetaData(); ResultSet tables = metaData.getTables...

    Mysql元数据如何生成Hive建表语句注释脚本详解

    本文主要给大家介绍了关于Mysql元数据生成Hive建表语句注释脚本的相关内容,分享出来供大家参考学习,下面话不多说了,来一起看看详细的介绍: 最近在将数据从Mysql 等其他关系型数据库 抽取到Hive 表中时,需要同步...

    PHP MYSQL 数据字典生成器

    2. **查询数据库元数据**:使用SQL语句(如`SHOW TABLES`,`DESCRIBE table_name`)获取数据库中的所有表及表结构信息,包括字段名、字段类型、长度、默认值、是否可为空等。 3. **解析并整理信息**:将查询到的元...

    mysql数据字典生成工具,一键生成,简单易用

    MySQL数据字典是数据库管理系统中的一个重要组成部分,它记录了数据库的结构信息,包括表、视图、索引、存储过程、触发器等元数据。这些信息对于数据库管理员和开发人员来说至关重要,因为它们能帮助理解数据库的...

    hive元数据mysql初始化导入

    通过mysql&gt; source XXXXX\hive-schema-3.1.0.mysql.sql初始化元数据

    全国快递物流查询 阿里云 物流公司 mysql数据 与 json数据

    JSON的灵活性也允许数据以键值对的形式携带丰富的元数据,如时间戳、地理位置等,为用户提供更全面的物流详情。 阿里云在此过程中扮演的角色至关重要。它提供了稳定、高性能的云服务,如云数据库RDS服务,用于托管...

    mysql数据抽取,自动生成hive建表语句

    2. **解析表结构**:查询MySQL的元数据信息,如字段名、字段类型、字段长度、是否为主键等。 3. **映射数据类型**:将MySQL的数据类型映射到Hive支持的数据类型。例如,MySQL的INT映射为Hive的INT,VARCHAR映射为...

Global site tag (gtag.js) - Google Analytics