创建存储过程后,我们经常需要查看其详细信息,包括其状态(何时创建、属于哪个数据库等)和具体的定义(源代码)。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'
C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:
一点编程也不会写的:零基础C语言学练课程
解决困扰你多年的C语言疑难杂症特性的C语言进阶课程
从零到写出一个爬虫的Python编程课程
只会语法写不出代码?手把手带你写100个编程真题的编程百练课程
信息学奥赛或C++选手的 必学C++课程
蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程
手把手讲解近五年真题的蓝桥杯辅导课程