目录
- 一、存储过程定义
- 二、存储过程特点
- 三、存储过程参数类型
- 四、创建与调用
- 五、示例
- 示例1:删除存在的存储过程
- 示例2:空参列表的存储过程
- 示例3:带IN参数的存储过程
- 示例4:带OUT参数的存储过程(聚合函数查询)
- 示例5:带IN和OUT参数的存储过程
- 示例6:带INOUT参数的存储过程
- 示例6:复杂业务逻辑的存储过程
存储过程(Stored Procedure)是计算机科学中的一个重要概念,特别是在大型数据库系统中。以下是对存储过程的详细解释:
一、存储过程定义
存储过程是一组为了完成特定功能的SQL语句集,这些语句经过编译后存储在数据库中。用户可以通过指定存储过程的名字并给出参数(如果该存储过程带有参数)来执行它。存储过程是数据库中的一个重要对象,它允许数据库用户封装复杂的SQL操作,以便重复使用和共享。
二、存储过程特点
- 封装性:存储过程将复杂的SQL操作封装成一个可重复使用的模块,提高了代码的可维护性和可读性。
- 高效性:存储过程在数据库中只编译一次,之后可以多次调用,从而提高了执行效率。特别是在数据量特别庞大的情况下,利用存储过程能达到倍速的效率提升。
- 安全性:通过存储过程,数据库管理员可以限制用户对数据库的直接访问,只允许用户通过存储过程来执行特定的操作,从而增强了数据库的安全性。
三、存储过程参数类型
存储过程可以带有参数,这些参数可以是输入参数(IN)、输出参数(OUT)或既是输入又是输出参数(INOUT)。
- 输入参数(IN):用于向存储过程传递数据。
- 输出参数(OUT):用于从存储过程返回数据。
- 输入输出参数(INOUT):既可以作为输入参数传递数据,也可以作为输出参数返回数据。
四、创建与调用
在MySQL中,创建存储过程的基本语法如下:
CREATE PROCEDURE 存储过程名 (参数列表)
BEGIN-- SQL语句集
END;
调用存储过程的基本语法如下:
CALL 存储过程名 (参数值列表);
五、示例
示例1:删除存在的存储过程
drop procedure if exists pro1;
示例2:空参列表的存储过程
DELIMITER // #指定结束符号
CREATE PROCEDURE pro1()
BEGININSERT INTO t_user VALUES (1, 18, '张三');INSERT INTO t_user VALUES (2, 20, '李四');
END //
DELIMITER ;
调用存储过程:
CALL pro1();
验证结果:
SELECT id, age, name FROM t_user;
示例3:带IN参数的存储过程
DELIMITER //
CREATE PROCEDURE pro2(IN id INT, IN age INT, IN name VARCHAR(20))
BEGININSERT INTO t_user VALUES (id, age, name);
END //
DELIMITER ;
调用存储过程:
SET @id = 3,