一、什么是存储过程
存储过程是为了完成特定功能的 SQL 语句集,经过编译创建并保存在数据库中,用户可以通过指定存储过程的名字并给定参数来调用执行,类似于编程语言中的方法或函数。
1.1 存储过程的优点
- 存储过程是对 SQL 语句的封装,增强可复用性;
- 存储过程可以隐藏复杂的业务逻辑和商业逻辑;
- 存储过程支持接受参数,并返回运算结果。
1.2 存储过程的缺点
- 存储过程的可以执行差,如果更换数据库要重新存储过程;
- 存储过程难以调试和扩展;
- 无法使用 Explain 对存储过程进行分析。
存储过程的语法如下:
[delimiter 声明语句结束符] create procedure 存储过程名称([存储过程参数]) begin sql 逻辑 end [声明语句结束符] [delimiter ;]
- 声明语句结束符一般用于sql 逻辑中如果有 ; 为结尾的sql语句,那么就需要使用delimiter 定义声明语句结束符。这样 MySQL 才能正确的找到存储过程正确的结束位置。
- 存储过程参数可以没有,如果存储过程需要返回值,那么就需要定义出参,如果存储过程需要从外部获得值就需要定义入参。
例如:
1.定义一个存储过程,计算两个数的和:
delimiter // create procedure num_sum(in num1 int, in num2 int ,out result int) begin set result=num1+num2; end // delimiter ;
在这个存储过程中入参为 num1 和 num2 表示,需要在参数名前面加上 in 表示入参,参数名后面是参数类型。result 是出参,需要在参数名前面加上 out。调用这个存储过程使用 call 关键字:
call num_sum(10,20,@result); select @result;
如果存储过程里需要定义变量,可使用 declare 关键字定义,个变量赋值使用 set 关键字:
delimiter // create procedure num_sum_add2(in num1 int, in num2 int ,out result int) begin declare n int ; set n=num1+num2; set result=n+2; end // delimiter ;