- 浏览: 842488 次
- 性别:
- 来自: 广州
文章分类
- 全部博客 (530)
- Java编程 (64)
- C/C++/D (6)
- .Net/C# (9)
- Ruby (12)
- JavaScript (77)
- XML (1)
- JSON (1)
- Ajax (17)
- ExtJs (81)
- YUI (1)
- JQuery (7)
- DWR (1)
- HTML (7)
- CSS (7)
- Database (6)
- PowerDesigner (23)
- DB2 (2)
- Oracle (57)
- MS SQL Server (8)
- MySQL (6)
- JSP/Servlet/JSTL/TagLib (3)
- Spring (1)
- Hibernate (0)
- iText (0)
- Struts (0)
- Struts2 (0)
- iReport (0)
- FreeMarker (0)
- HttpClient (1)
- POI (6)
- FckEditor (15)
- Eclipse / MyEclipse (10)
- IntelliJ IDEA (0)
- NetBeans (0)
- Tomcat (11)
- WebLogic (1)
- Jboss (3)
- jetty (4)
- IIS (2)
- CVS/VSS (1)
- FTP (1)
- Windows/DOS (6)
- Linux/Unix (0)
- 软件建模 UML (0)
- Design Pattern & Thinking In Programming (10)
- 数据结构与算法 (12)
- 软件项目管理 (9)
- 行业应用解决方案 (3)
- 电脑软件与故障解决 (13)
- 编程语言 (1)
- 十万个为什么 (3)
- JBPM (2)
- sysbase (2)
- JDBC (8)
- Ant (2)
- Case-计算机辅助软件工程 (1)
- WebService (4)
- 浏览器 (1)
最新评论
-
gaoqiangjava:
同一楼,还请大手帮解决
JAVA读取word文件 -
hyl523:
// 判断数组中的第一个值是否未定义,如果未定义,便定义为空对 ...
javascript面向对象之二 命名空间 -
ping12132200:
ping12132200 写道我抱着个错不是因为:body标签 ...
extjs在IE报对象不支持此属性或方法 -
ping12132200:
我抱着个错不是因为:body标签内的第一个元素不能为文本tex ...
extjs在IE报对象不支持此属性或方法 -
fireinjava:
呀,不错,转走了,谢谢啦~
利用OpenOffice将word转换成PDF
创建了很多的存储过程了,他们也都保存在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'// 这条语句显示了我们所有创建的存储过程,内容在这里我就不列出来了!!
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存储过程实例
2011-04-09 15:07 1019存储过程: 存储过程 ... -
如何对MySQL数据库表进行锁定
2010-01-12 23:10 811如果你同时运行表的检查/修复程序时,你或许不想让MySQL服务 ... -
轻松掌握MySQL数据库锁机制的相关原理
2010-01-12 23:09 830在MySQL 中对于使用表级锁定的存储引擎,表锁 ... -
征服MySQL之 外键与参照完整性
2010-01-12 23:07 993参照完整性(Referential integrity)是 ... -
mysql数据库备份、修改root密码
2008-12-01 17:30 12371、mysql数据库备份: mysqldump -h 主机名 ...
相关推荐
MySQL元数据是关于数据库本身的信息,包括查询结果、数据库和数据表的结构以及服务器的状态和配置。这些信息对于数据库管理和应用程序开发至关重要,因为它们提供了关于数据操作的影响、数据库结构和服务器运行状况...
1. **元数据同步**:MySQL-Bridge 主要负责将 MySQL 数据库的表结构、索引、视图等元数据实时同步到 Atlas 平台,确保 Atlas 中的数据模型与 MySQL 实例保持一致。 2. **变更数据捕获**:除了基础的元数据同步,...
在IT行业中,数据库管理是至关重要的,而...总结来说,MySQL的数据词典导出涉及到查询数据库元数据、使用`mysqldump`命令和利用文本转换工具。掌握这一流程,可以帮助数据库管理员更高效地管理和共享数据库结构信息。
MySQL数据字典导出工具是专门用于MySQL数据库的管理和维护的一款实用程序,它允许用户方便地导出数据库的元数据,即数据字典信息。数据字典在数据库管理中起着至关重要的作用,因为它存储了关于数据库结构、表、列、...
数据字典是数据库管理系统中的一个重要组成部分,它存储了关于数据库的所有元数据(metadata),包括表、列、索引、视图、用户权限等信息。创建数据字典文档有助于理解和管理复杂的数据库结构,提高团队协作效率。 ...
### MySQL元数据锁定详解 #### 引言 MySQL的数据字典长期以来一直是开发者和技术架构师眼中的神秘领域。自MySQL早期版本以来,其设计一直围绕着`.frm`(格式)文件展开,这些文件包含了基础关系表的定义,并且每个...
要查看MySQL中的元数据锁阻塞情况,可以使用几个内部视图和命令。以下是具体步骤和分析方法: 1. 使用`SHOW PROCESSLIST`命令:此命令用于查看当前MySQL服务器上的线程及其状态。如果某个会话处于等待状态(Waiting...
这个可执行文件的作用是解析MySQL数据库的元数据,并将这些信息以易于阅读和理解的格式(如HTML或PDF)输出。它通常会收集如表结构、字段类型、索引、外键关系等信息,并生成详细的文档。使用`mysqldoc`,用户可以...
MySQL提供了一个名为INFORMATION_SCHEMA的特殊数据库,其中包含了大量的元数据表。通过查询这些表,可以获取更多关于数据库对象的详细信息。例如,要查看某个表的所有列信息,可以使用以下SQL语句: ```sql ...
MySQL数据字典导出工具是一款高效实用的软件,专为数据库管理员和开发人员设计,用于轻松地导出MySQL数据库中的元数据,即数据字典。数据字典在数据库管理中扮演着至关重要的角色,它包含了关于数据库结构、表、列、...
数据字典在数据库系统中扮演着至关重要的角色,它存储了关于数据库结构、表、索引、视图以及权限等元数据信息。通过导出数据字典,用户可以备份这些元数据,方便在系统故障或迁移时恢复,也可以用于分析和优化数据库...
2. **获取元数据**:使用`DatabaseMetaData`接口获取数据库的元数据,包括表信息、列信息、索引等。例如: ```java DatabaseMetaData metaData = conn.getMetaData(); ResultSet tables = metaData.getTables...
本文主要给大家介绍了关于Mysql元数据生成Hive建表语句注释脚本的相关内容,分享出来供大家参考学习,下面话不多说了,来一起看看详细的介绍: 最近在将数据从Mysql 等其他关系型数据库 抽取到Hive 表中时,需要同步...
2. **查询数据库元数据**:使用SQL语句(如`SHOW TABLES`,`DESCRIBE table_name`)获取数据库中的所有表及表结构信息,包括字段名、字段类型、长度、默认值、是否可为空等。 3. **解析并整理信息**:将查询到的元...
MySQL数据字典是数据库管理系统中的一个重要组成部分,它记录了数据库的结构信息,包括表、视图、索引、存储过程、触发器等元数据。这些信息对于数据库管理员和开发人员来说至关重要,因为它们能帮助理解数据库的...
通过mysql> source XXXXX\hive-schema-3.1.0.mysql.sql初始化元数据
JSON的灵活性也允许数据以键值对的形式携带丰富的元数据,如时间戳、地理位置等,为用户提供更全面的物流详情。 阿里云在此过程中扮演的角色至关重要。它提供了稳定、高性能的云服务,如云数据库RDS服务,用于托管...
2. **解析表结构**:查询MySQL的元数据信息,如字段名、字段类型、字段长度、是否为主键等。 3. **映射数据类型**:将MySQL的数据类型映射到Hive支持的数据类型。例如,MySQL的INT映射为Hive的INT,VARCHAR映射为...