在创建 MySQL 存储过程之后,我们往往需要进一步查看它的详细信息,包括存储过程状态信息(如创建时间、所属数据库、定义者等)以及完整定义内容(源代码)。MySQL 提供了多种常用方法来完成存储过程查看与管理。

一、 查看存储过程的状态:`SHOW PROCEDURE STATUS`
这条命令主要用于列出 MySQL 存储过程的元数据信息,也就是描述性信息,作用类似于查看文件属性。
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(以调用者权限执行)。这是 MySQL 存储过程权限控制中非常关键的安全特性。 |
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`
这条命令用于获取重新创建该 MySQL 存储过程所需的完整 SQL 语句,也就是它的“源代码”或定义语句。
1. 基本语法
SHOW CREATE PROCEDURE <存储过程名>;
2. 关键信息说明
执行 `SHOW CREATE PROCEDURE showstuscore G` 后,返回结果一般包含以下核心字段:
`Procedure`: 存储过程名称。
`sql_mode`: 创建时生效的 SQL 模式,这会影响 SQL 语法校验和执行行为。
`Create Procedure`:这是最核心的内容,它展示的是完整的 `CREATE PROCEDURE` 语句。将这段代码复制出来后,就可以在其他 MySQL 环境中重新创建出相同的存储过程。
同时还会包含字符集相关信息。
三、 直接查询系统表:`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'
