创建存储过程后,我们经常需要查看其详细信息,包括其状态(何时创建、属于哪个数据库等)和具体的定义(源代码)。MySQL 提供了多种方法来实现这一点。

一、 查看存储过程的状态:`SHOW PROCEDURE STATUS`

这条命令用于列出存储过程的元数据信息(描述信息),类似于文件属性。

1. 基本语法

SHOW PROCEDURE STATUS [LIKE 'pattern' | WHERE search_condition];

   `LIKE 'pattern'`:用于过滤存储过程的名称。`'pattern'` 是可以包含通配符 `%` (匹配任意多个字符) 和 `_` (匹配一个字符) 的字符串。

   `WHERE`:提供更灵活的过滤条件(MySQL 5.0+ 支持)。

 

2. 关键信息说明**

执行 `SHOW PROCEDURE STATUS LIKE 'showstuscore' \G` 后,返回的结果包含以下重要字段:

字段名说明
Db存储过程所在的数据库。
Name存储过程的名称。
Type类型,这里是 PROCEDURE(如果是函数则为 FUNCTION)。
Definer创建者(格式为 'user_name'@'host_name')。
Modified最后修改时间。
Created创建时间。
Security_type安全类型,可以是 DEFINER(以定义者权限执行)或 INVOKER(以调用者权限执行)。这是一个非常重要的安全特性。
Comment注释信息。


   `character_set_client`, `collation_connection`, `Database Collation`: 字符集和校对规则信息,反映了创建该过程时客户端的设置。

 

3. 使用示例

 查看所有存储过程的状态(信息很多)

SHOW PROCEDURE STATUS;

 

 查看名称以'show'开头的存储过程状态

SHOW PROCEDURE STATUS LIKE 'show%';

 

 查看特定名称的存储过程状态(使用\G使结果显示更清晰)

SHOW PROCEDURE STATUS LIKE 'showstuscore' \G

 

 使用WHERE子句过滤,例如查看test数据库中的所有存储过程

SHOW PROCEDURE STATUS WHERE Db = 'test';

 

二、 查看存储过程的定义:`SHOW CREATE PROCEDURE`

这条命令用于获取重新创建该存储过程所需的原始SQL语句,即它的“源代码”。

1. 基本语法

SHOW CREATE PROCEDURE <存储过程名>;

 

2. 关键信息说明

执行 `SHOW CREATE PROCEDURE showstuscore \G` 后,返回的结果包含以下核心字段:

   `Procedure`: 存储过程名。

   `sql_mode`: 创建时有效的 SQL 模式,这会影响 SQL 语句的语法检查和执行。

   `Create Procedure`: 这是最重要的部分,即完整的 `CREATE PROCEDURE` 语句。你可以直接复制这段代码来在其他环境中重建相同的存储过程。

   字符集信息。

 

三、 直接查询系统表:`information_schema.Routines`

`information_schema` 是一个虚拟数据库,包含了MySQL服务器维护的所有元数据。`Routines` 表存储了所有存储过程和函数的信息。

 

1. 基本语法

SELECT * FROM information_schema.Routines 
WHERE ROUTINE_NAME = 'procedure_name' 
AND ROUTINE_TYPE = 'PROCEDURE';

 注意:ROUTINE_NAME 字段在某些系统上是大小写敏感的,取决于系统的lower_case_table_names配置。

   这是一个标准的SQL查询,非常灵活,你可以选择特定的字段。

 

2. 常用查询示例

 1. 查询特定存储过程的详细信息(最常用)

SELECT * FROM information_schema.Routines 
WHERE ROUTINE_NAME = 'showstuscore' 
AND ROUTINE_TYPE = 'PROCEDURE';

 

 2. 只查看存储过程的定义(SQL正文)

SELECT ROUTINE_DEFINITION 
FROM information_schema.Routines 
WHERE ROUTINE_NAME = 'showstuscore' 
AND ROUTINE_TYPE = 'PROCEDURE';

 

 3. 查看某个数据库下的所有存储过程的名字和定义者

SELECT ROUTINE_NAME, DEFINER 
FROM information_schema.Routines 
WHERE ROUTINE_SCHEMA = 'your_database_name' 
AND ROUTINE_TYPE = 'PROCEDURE'

点赞(1)

C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:

一点编程也不会写的:零基础C语言学练课程

解决困扰你多年的C语言疑难杂症特性的C语言进阶课程

从零到写出一个爬虫的Python编程课程

只会语法写不出代码?手把手带你写100个编程真题的编程百练课程

信息学奥赛或C++选手的 必学C++课程

蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程

手把手讲解近五年真题的蓝桥杯辅导课程

Dotcpp在线编译      (登录可减少运行等待时间)