当前位置: 首页 > news >正文

MySQL查看存储过程和存储函数

【图书推荐】《MySQL 9从入门到性能优化(视频教学版)》-CSDN博客


《MySQL 9从入门到性能优化(视频教学版)(数据库技术丛书)》(王英英)【摘要 书评 试读】- 京东图书 (jd.com)

MySQL9数据库技术_夏天又到了的博客-CSDN博客

MySQL中存储了存储过程和存储函数的状态信息,用户可以使用SHOW STATUS语句或SHOW CREATE语句来查看,也可直接从系统的information_schema数据库中查询。本节将通过实例来介绍这3种方法。

8.3.1  使用SHOW STATUS语句查看存储过程和存储函数的状态

SHOW STATUS语句可以查看存储过程和存储函数的状态,其基本语法结构如下:

SHOW {PROCEDURE | FUNCTION} STATUS [LIKE 'pattern']

这个语句是一个MySQL的扩展,返回子程序的特征,如数据库、名字、类型、创建者及创建和修改日期。如果没有指定样式,那么根据使用的语句,所有存储程序或存储函数的信息都会被列出。其中,PROCEDURE和FUNCTION分别表示查看存储过程和存储函数;LIKE语句表示匹配存储过程或存储函数的名称。

【例8.24】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等一些相关信息。

8.3.2  使用SHOW CREATE语句查看存储过程和存储函数的定义

除了SHOW STATUS之外,MySQL还可以使用SHOW CREATE语句查看存储过程和存储函数的状态。语法格式如下:

SHOW CREATE {PROCEDURE | FUNCTION} sp_name

这个语句是一个MySQL的扩展,类似于SHOW CREATE TABLE,它返回一个可用来重新创建已命名子程序的确切字符串。PROCEDURE和FUNCTION分别表示查看存储过程和存储函数;sp_name参数表示匹配存储过程或存储函数的名称。

【例8.25】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,以及数据库设置的一些信息。

8.3.3  从information_schema.Routines表中查看存储过程和存储函数的信息

MySQL中存储过程和存储函数的信息存储在information_schema数据库下的Routines表中。可以通过查询该表的记录来查询存储过程和存储函数的信息。其基本语法形式如下:

SELECT * FROM information_schema.Routines 
WHERE ROUTINE_NAME=' sp_name ' ;

其中,ROUTINE_NAME字段中存储的是存储过程和存储函数的名称;sp_name参数表示存储过程或存储函数的名称。

【例8.26】从Routines表中查询名称为CountProc2的存储函数的信息,SQL语句如下:

SELECT * FROM information_schema.Routines WHERE ROUTINE_NAME='CountProc2'  AND  ROUTINE_TYPE = 'FUNCTION' \G

语句执行如下:

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字段表明查询的是哪种类型的存储程序。

相关文章:

  • 2025 AutoCable 中国汽车线束线缆及连接技术创新峰会启动报名!
  • vscode本地和远程对应分支没有同步提交数量
  • 从零开始认识大语言模型(LLM)
  • 尚航科技助力DeepSeek正式登陆无锡
  • 探秘Hugging Face与DeepSeek:AI开源世界的闪耀双子星
  • EtherCAT技术介绍
  • 深度学习中的知识蒸馏
  • 曼哈顿距离:菱形打印与路径规划
  • mysql读写分离与proxysql的结合
  • springboot中通过@Autowired依赖注入关联@RestControl@Service @Mapper @Data@TableName实现接口服务
  • React - 组件之props属性
  • 《Python 中 JSON 的魔法秘籍:从入门到精通的进阶指南》
  • vue中使用lodash的debounce(防抖函数)
  • spring boot和spring cloud的关系
  • Django 操作表中的数据(增删改查)
  • 用python写一个聊天室程序
  • 【二分搜索 C/C++】洛谷P1024 一元三次方程求解
  • 【deepseek 部署中的常见问题及解决方案--亲测有效】
  • 机器视觉中的3d和2d的区别
  • Unity实现UI拖拽
  • 习近平将出席中国—拉美和加勒比国家共同体论坛第四届部长级会议开幕式并发表重要讲话
  • 普京提议于15日在土耳其恢复俄乌直接谈判
  • 海航回应“男团粉丝为追星堵住机舱通道”:已紧急阻止
  • 长沙潮宗街内“金丝楠木老屋文旅博物馆”起火:明火已扑灭,无伤亡
  • 图集︱“中国排面”威武亮相
  • 71岁导演詹姆斯・弗雷病逝,曾执导《纸牌屋》、麦当娜MV