【重学 MySQL】七十五、揭秘存储过程的分类与实战案例,让你的数据库操作更高效!
- MySQL存储过程的分类
- MySQL存储过程的实战案例
- 创建和调用无参数的存储过程
- 创建和调用带IN模式参数的存储过程
- 创建和调用带OUT模式参数的存储过程
- 创建和调用带INOUT模式参数的存储过程
在MySQL数据库中,存储过程是一组为了完成特定功能的SQL语句集,它存储在数据库中,一次编译后永久有效,用户通过指定存储过程的名字并给出参数(如果该存储过程带有参数)来执行它。存储过程的使用可以带来多方面的优势,如加快数据的处理速度、降低系统负载、提高代码复用性等。
MySQL存储过程的分类
MySQL中的存储过程根据使用特点可以分为以下两种:
- 基本存储过程(Basic Stored Procedure):基本存储过程不包含控制语句(如条件语句、循环语句、异常处理等),只包含一到多个SQL语句的顺序执行。它通常用于简单的数据操作或个别的业务逻辑,比如插入、更新、删除等。
- 复杂存储过程(Complex Stored Procedure):复杂存储过程包含控制语句和多个SQL语句的组合,其执行流程可以根据不同的条件进行分支和循环操作,还可以进行异常处理、返回参数和结果集等高级操作。复杂存储过程通常用于业务逻辑复杂、数据关联度高的场景,比如报表生成、数据处理等。
MySQL存储过程的实战案例
创建和调用无参数的存储过程
案例要求:向boys表中插入数据。
- 创建存储过程:
delimiter $
create procedure mypro1()
beginINSERT into boys VALUES(5,'张三',1223);INSERT into boys VALUES(6,'张6',1233);INSERT into boys VALUES(7,'张7',1243);INSERT into boys VALUES(8,'张8',1253);
END$
- 调用存储过程:
call mypro1();
创建和调用带IN模式参数的存储过程
案例要求:创建存储过程实现根据女生名,查找对应的男生信息。
- 创建存储过程:
delimiter $
create procedure mypro3(IN girlname varchar(20))
BEGINselect * from boys b right join beauty g ON b.id=g.boyfrind_id where g.name=girlname;
END$
- 调用存储过程:
call mypro3('刘岩');
call mypro3('小昭');
创建和调用带OUT模式参数的存储过程
案例要求:根据女生名,返回对应的男生名。
- 创建存储过程(以MySQL 8.0版本为例):
delimiter $
create procedure mypro4(IN girlname varchar(20), OUT mingzi varchar(20))
BEGINselect b.boyname INTO mingzi FROM beauty g JOIN boys b ON g.boyfrind_id=b.id where g.NAME=girlname;
END$
- 调用存储过程:
CALL mypro4('小昭', @bName);
select @bName;
创建和调用带INOUT模式参数的存储过程
案例要求:传入a和b两个值,最终a和b都翻倍并返回。
- 创建存储过程:
delimiter $
create PROCEDURE mypr05(INOUT a int, INOUT b int)
BEGINSET a=a*2;SET b=b*2;
END$
- 调用存储过程:
SET @c=2;
SET @d=10;
call mypr05(@c,@d);
select @c, @d;
通过以上分类和实战案例,相信你对MySQL存储过程有了更深入的了解。在实际应用中,可以根据业务需求选择合适的存储过程类型,并通过创建、调用、删除和查看等操作来管理存储过程,从而提高数据库操作的效率和性能。