标签:
杂谈 |
分类: 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
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
select * from db1 |
+———–+———-+———————————————————————-+
1 row in set (0.00 sec)
2、执行show procedure
status,这种方法可以返回更多信息的细节:
mysql> show procedure status like
‘pro1′//
+—–+——+———–+—————-+———————+———————+—————+———+
| Db | Name |
Type
+—–+——+———–+—————-+———————+———————+—————+———+
| db1 | pro1 | PROCEDURE | | 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
+—–+——+———–+—————-+———————+———————+—————+———+
| db1 | p1
+—–+——+———–+—————-+———————+———————+—————+———+
1 row in set (0.00 sec)
3、使用select可以获得更多的信息
mysql> select * from mysql.proc where
name=’pro1′//
+—–+——+———–+—————+———-+—————–+——————+—————+————+———+————————————————————————————————————————————–+—————-+———————+———————+———-+———+
| db | name |
type
+—–+——+———–+—————+———-+—————–+——————+—————+————+———+————————————————————————————————————————————–+—————-+———————+———————+———-+———+
| db1 | pro1 | PROCEDURE |
pro1
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 | | 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标准”的方式完成工作。这是最好的实现方式,其他的方式可能会出现错误。
mysql> select table_name,column_name,column_type
from information_schema.columns where
table_name=’routines’//
+————+——————–+————–+
| table_name |
column_name
+————+——————–+————–+
| ROUTINES
| ROUTINES
| ROUTINES
| ROUTINES
| ROUTINES
| ROUTINES
| ROUTINES
| ROUTINES
| ROUTINES
| ROUTINES
| ROUTINES
| ROUTINES
| ROUTINES
| ROUTINES
| ROUTINES
| ROUTINES
| ROUTINES
| ROUTINES
| ROUTINES
| ROUTINES
+————+——————–+————–+
20 rows in set (0.00 sec)
columns获取一样,获取的是元数据的数据元素。再比如看一下数据库db1中已经定义了多少存储过程:
mysql> select count(*) from
information_schema.routines where
routine_schema=’db1′//
+———-+
| count(*) |
+———-+
|
+———-+
1 row in set (0.00 sec)
mysql> show procedure status where
name=’pro1′//
+—–+——+———–+—————-+———————+———————+—————+———+
| Db | Name |
Type

加载中…