MySQL查看存储过程的3种方法(附带实例)
MySQL 存储了存储过程和函数的状态信息,用户可以使用 SHOW STATUS 语句或 SHOW CREATE 语句来查看,也可直接从系统的 information_schema 数据库中查询。
这个语句是一个 MySQL 的扩展,返回子程序的特征,如数据库、名字、类型、创建者及创建和修改日期。如果没有指定样式,那么根据使用的语句,所有存储程序或存储函数的信息都会被列出。
【实例】SHOW STATUS语句示例,代码如下:
这个语句是一个 MySQL 的扩展。类似于 SHOW CREATE TABLE,它返回一个可用来重新创建已命名子程序的确切字符串。
【实例】SHOW CREATE 语句示例,代码如下:
查看的基本语法形式如下:
【实例】从Routines表中查询名称为CountProc2的存储函数的信息,代码如下:
SHOW STATUS语句查看存储过程和函数
SHOW STATUS语句可以查看存储过程和函数的状态,其基本语法结构如下:SHOW {PROCEDURE | FUNCTION} STATUS [LIKE 'pattern']其中,PROCEDURE 和 FUNCTION 分别表示查看存储过程和函数;LIKE 语句表示匹配存储过程或函数的名称。
这个语句是一个 MySQL 的扩展,返回子程序的特征,如数据库、名字、类型、创建者及创建和修改日期。如果没有指定样式,那么根据使用的语句,所有存储程序或存储函数的信息都会被列出。
【实例】SHOW STATUS语句示例,代码如下:
mysql> SHOW PROCEDURE STATUS LIKE 'C%'\G *** 1. row *** Db: test_db Name: CountProc Type: PROCEDURE Definer: root@localhost Modified: 2018-11-21 13:52:28 Created: 2018-11-21 13:52:28 Security_type: DEFINER Comment: character_set_client: gbk collation_connection: gbk_chinese_ci Database Collation: utf8mb4_0900_ai_ci“SHOW PROCEDURE STATUS LIKE 'C%'\G”语句获取数据库中所有名称以字母“C”开头的存储过程的信息。通过上面的语句可以看到,这个存储函数所在的数据库为 test_db、存储函数的名称为 CountProc 等一些相关信息。
SHOW CREATE语句查看存储过程和函数
除了 SHOW STATUS 之外,MySQL 还可以使用 SHOW CREATE 语句查看存储过程和函数的状态。SHOW CREATE {PROCEDURE | FUNCTION} sp_namePROCEDURE和FUNCTION分别表示查看存储过程和函数;sp_name参数表示匹配存储过程或函数的名称。
这个语句是一个 MySQL 的扩展。类似于 SHOW CREATE TABLE,它返回一个可用来重新创建已命名子程序的确切字符串。
【实例】SHOW CREATE 语句示例,代码如下:
mysql> SHOW CREATE FUNCTION test_db.CountProc2 \G *************************** 1. row *************************** Function: CountProc2 sql_mode: STRICT_TRANS_TABLES,NO_ENGINE_SUBSTITUTION Create Function: CREATE DEFINER=`root`@`localhost` FUNCTION `CountProc2`(sid INT) RETURNS int(11) BEGIN RETURN (SELECT COUNT(*) FROM fruits WHERE s_id = sid); END character_set_client: gbk collation_connection: gbk_chinese_ci Database Collation: utf8mb4_0900_ai_ci执行上面的语句可以得到存储函数的名称为 CountProc2,sql_mode 为 sql 的模式,Create Function 为存储函数的具体定义语句,还有数据库设置的一些信息。
从information_schema.Routines表中查看存储过程和函数
MySQL 中存储过程和函数的信息存储在 information_schema 数据库下的 Routines 表中。可以通过查询该表的记录来查询存储过程和函数的信息。查看的基本语法形式如下:
SELECT * FROM information_schema.Routines WHERE ROUTINE_NAME=' sp_name ' ;其中,ROUTINE_NAME 字段中存储的是存储过程和函数的名称;sp_name 参数表示存储过程或函数的名称。
【实例】从Routines表中查询名称为CountProc2的存储函数的信息,代码如下:
mysql> SELECT * FROM information_schema.Routines WHERE ROUTINE_NAME='CountProc2' AND ROUTINE_TYPE = 'FUNCTION' \G *************************** 1. row *************************** SPECIFIC_NAME: CountProc2 ROUTINE_CATALOG: def ROUTINE_SCHEMA: test_db ROUTINE_NAME: CountProc2 ROUTINE_TYPE: FUNCTION DATA_TYPE: int CHARACTER_MAXIMUM_LENGTH: NULL CHARACTER_OCTET_LENGTH: NULL NUMERIC_PRECISION: 10 NUMERIC_SCALE: 0 DATETIME_PRECISION: NULL CHARACTER_SET_NAME: NULL COLLATION_NAME: NULL DTD_IDENTIFIER: int(11) ROUTINE_BODY: SQL ROUTINE_DEFINITION: BEGIN RETURN (SELECT COUNT(*) FROM fruits WHERE s_id = sid); END EXTERNAL_NAME: NULL EXTERNAL_LANGUAGE: SQL PARAMETER_STYLE: SQL IS_DETERMINISTIC: NO SQL_DATA_ACCESS: CONTAINS SQL SQL_PATH: NULL SECURITY_TYPE: DEFINER CREATED: 2018-11-21 16:57:09 LAST_ALTERED: 2018-11-21 16:57:09 SQL_MODE: STRICT_TRANS_TABLES,NO_ENGINE_SUBSTITUTION ROUTINE_COMMENT: DEFINER: root@localhost CHARACTER_SET_CLIENT: gbk COLLATION_CONNECTION: gbk_chinese_ci DATABASE_COLLATION: utf8mb4_0900_ai_ci在 information_schema 数据库的 Routines 表中,存储着所有存储过程和函数的定义。使用 SELECT 语句查询 Routines 表中的存储过程和函数的定义时,一定要使用 ROUTINE_NAME 字段指定存储过程或函数的名称。否则,将查询出所有的存储过程或函数的定义。如果有存储过程和存储函数名称相同,就需要同时指定 ROUTINE_TYPE 字段,以表明查询的是哪种类型的存储程序。