三十五、存储过程的基本使用

一、什么是存储过程

存储过程是为了完成特定功能的 SQL 语句集,经过编译创建并保存在数据库中,用户可以通过指定存储过程的名字并给定参数来调用执行,类似于编程语言中的方法或函数。

1.1 存储过程的优点
  1. 存储过程是对 SQL 语句的封装,增强可复用性;
  2. 存储过程可以隐藏复杂的业务逻辑和商业逻辑;
  3. 存储过程支持接受参数,并返回运算结果。
1.2 存储过程的缺点
  1. 存储过程的可以执行差,如果更换数据库要重新存储过程;
  2. 存储过程难以调试和扩展;
  3. 无法使用 Explain 对存储过程进行分析。

存储过程的语法如下:

[delimiter 声明语句结束符]
create procedure 存储过程名称([存储过程参数])
begin
    sql 逻辑
end
[声明语句结束符]
[delimiter ;]
复制代码
  1. 声明语句结束符一般用于sql 逻辑中如果有 ; 为结尾的sql语句,那么就需要使用delimiter 定义声明语句结束符。这样 MySQL 才能正确的找到存储过程正确的结束位置。
  2. 存储过程参数可以没有,如果存储过程需要返回值,那么就需要定义出参,如果存储过程需要从外部获得值就需要定义入参。

例如:

  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 ;
复制代码
© 版权声明
THE END
喜欢就支持一下吧
点赞0 分享