MySQL存储过程概述

2022-10-06 10:25:42

一、存储过程简介

  • 存储过程是一组为了完成特定功能的SQL语句集合
  • 比传统SQL速度更快,执行效率更高
  • 存储过程的优点:
  1. 执行一次后,会将生成的二进制代码驻留缓冲区,提高执行效率
  2. SQL语句加上控制语句的集合,灵活性高
  3. 在服务端存储,客户端调用时,降低网络负载
  4. 可多次重复被调用,可随时修改,不影响客户端调用
  5. 可完成所有的数据库操作,也可控制数据库的信息访问权限

二、创建存储过程

  • 使用CREATE PROCEDURE语句创建存储过程
  • 创建存储过程的语法结构
CREATE PROCEDURE <过程名> ([过程参数[,...]]) <过程体> [过程参数[,...]] 格式
[IN|OUT|INOUT] <参数名> <类型>
  • 参数分为:
  1. 输入参数:IN
  2. 输出参数:OUT
  3. 输入/输出参数:INOUT
  • 存储过程的主题部分,被称为过程体
  • 以BEGIN开始,以END结束,若只有一条SQL语句,则可以省略BEGIN-END
  • 以DELIMITER开始和结束
mysql> DELIMITER $$   //$$是用户自定义的结束符
//省略存储过程其他步骤
mysql> DELIMITER;   //分号前有空格
  • 调用存储过程
call 存储过程名(实际参数);
  • 查询存储过程
show procedure status where db='数据库';
  • 删除存储过程
drop procedure 存储过程名;

例:

mysql> delimiter $$        ## 创建存储过程
mysql> create procedure myrole()
    -> begin
    -> select name,id from info;
    -> end$$
Query OK, 0 rows affected (0.00 sec)

mysql> delimiter ;

mysql> show procedure status where db='school';   ## 查看已创建的存储过程
+--------+--------+-----------+----------------+---------------------+---------------------+---------------+---------+----------------------+----------------------+--------------------+
| Db     | Name   | Type      | Definer        | Modified            | Created             | Security_type | Comment | character_set_client | collation_connection | Database Collation |
+--------+--------+-----------+----------------+---------------------+---------------------+---------------+---------+----------------------+----------------------+--------------------+
| school | myrole | PROCEDURE | root@localhost | 2020-08-28 21:46:04 | 2020-08-28 21:46:04 | DEFINER       |         | utf8                 | utf8_general_ci      | utf8_general_ci    |
| school | role   | PROCEDURE | root@localhost | 2020-08-28 21:26:08 | 2020-08-28 21:26:08 | DEFINER       |         | utf8                 | utf8_general_ci      | utf8_general_ci    |
+--------+--------+-----------+----------------+---------------------+---------------------+---------------+---------+----------------------+----------------------+--------------------+

mysql> call myrole();     ## 调用存储过程
+------+----+
| name | id |
+------+----+
| tom  |  1 |
|      |  2 |
| NULL |  3 |
+------+----+
3 rows in set (0.00 sec)
  • 作者:琴酒3
  • 原文链接:https://blog.csdn.net/u014042047/article/details/108287439
    更新时间:2022-10-06 10:25:42