`
liss
  • 浏览: 829213 次
  • 性别: 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 元数据查看及实例代码的相关资料,需要的朋友可以参考下

    hive元数据mysql初始化导入

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

    2023年,MySQL最新最详细的教程资源 详细讲解了MySQL的各种用法

    内容:包含了MySQL所有的详细用法, MySQL 连接 MySQL 创建数据库 ...MySQL 元数据 MySQL 序列使用 MySQL 处理重复数据 MySQL 及 SQL 注入 MySQL 导出数据 MySQL 导入数据 MySQL 函数 MySQL 运算符

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

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

    atlas 的 mysql-bridge.zip

    atlas mysql-bridge.zip 需要配置文件可以联系我给格式

    mysql元数据工具类

    可以获取数据库所有表、获取表字段信息

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

    主要介绍了MySQL如何查看元数据锁阻塞在什么地方的相关资料,希望通过本文能帮助到大家,让大家实现这样的功能,需要的朋友可以参考下

    论文研究-基于Redis和Mysql的存储系统的设计与实现 .pdf

    基于Redis和Mysql的存储系统的设计与实现,范东媛,钮心忻,本文基于Redis和Mysql数据库设计并且实现了在线学习平台的数据存储系统。利用Mysql的持久化存储和Redis的高速读写设计出具有存储数据庞�

    MySQL8中文参考手册2022官方.zip

    基于元数据的存储文件的去除。看到14.2节,“除基于文件的元数据存储” 事务,字典数据安全存储。看到14.3节,“事务性存储字典数据” 统一和集中的字典对象缓存。看到14.4节,“字典对象缓存” 一个简单的和改进的...

    数据仓库hive用到的mysql安装包

    mysql安装包,mysql外界数据库作为存储hive元数据的存储介质,它的存在,方便hive用户根据自身的需求对数据进行分析处理。

    JDBC读取数据库元数据,自动生成JAVA实体类

    JDBC读取数据库元数据,生成JAVA实体类

    MySQL 教程 开发文档 从基础到精通

    一.My SQL数据库简介 二.MySQL 安装 三.MySQL 管理 四.MySQL 连接 五.MySQL 创建数据库 六.MySQL 删除数据库 七.... MySQL 元数据 二十九. MySQL 序列使用 三十. MySQL 处理重复数据 三十一. MySQL 及 SQL 注入

    详细分析mysql MDL元数据锁

    当你在MySQL中执行一条SQL时,语句并没有在你预期的时间内执行完成,这时候我们通常会登陆到MySQL数据库上查看是不是出了什么问题,通常会使用的一个命令就是 show processlist,看看有哪些session,这些session在做...

    MySql 5.1 参考手册.chm

    10.6. 用于元数据的UTF8 10.7. 与其它DBMS的兼容性 10.8. 新字符集配置文件格式 10.9. 国家特有字符集 10.10. MySQL支持的字符集和校对 10.10.1. Unicode字符集 10.10.2. 西欧字符集 10.10.3. 中欧字符集 10.10.4. ...

    MySQL Metadata Locking

    MySQL Metadata Locking

    MySQL 5.1中文手冊

    10.6. 用于元数据的UTF8 10.7. 与其它DBMS的兼容性 10.8. 新字符集配置文件格式 10.9. 国家特有字符集 10.10. MySQL支持的字符集和校对 10.10.1. Unicode字符集 10.10.2. 西欧字符集 10.10.3. 中欧字符集 10.10.4. ...

    mysql数据表世界货币详细表

    mysql数据表世界货币详细表简写中英文等例子:INSERT INTO `currency_code` VALUES ('1', 'AED', '阿联酋迪拉姆', 'United Arab Emirates Dirham'); INSERT INTO `currency_code` VALUES ('2', 'AFN', '阿富汗尼', '...

    oozie配置mysql:表结构详解

    oozie配置mysql所需表结构。Apache Oozie是用于Hadoop平台的一种工作流调度引擎。

Global site tag (gtag.js) - Google Analytics