MySQL 存储过程一

定义

简单理解,存储过程就是集合了逻辑和流程的sql集,可以实现复杂的逻辑功能

特性

具有输入输出变量,可声明变量,有 if/else,while等控制语句
执行速度快,只有首次执行需经过编译和优化步骤,后续被调用可以直接执行,省去以上步骤;
函数的普遍特性:模块化,封装,代码复用;

实例

<strong>一个简单的实例</strong>

create procedure select_name()
begin 
      select userPhone from users;
end

如下

image.png

创建存储过程前,可以先使用 delimiter 把 ; 改成 //

调用如下:

call select_name();

如下图:

image.png

<strong>删除存储过程</strong>

DROP PROCEDURE IF EXISTS porcedureName; -- 没有括号() 

<strong>使用out参数的存储过程</strong>

create procedure procedureName( 
    out min decimal(8,2), 
    out avg decimal(8,2), 
    out max decimal(8,2) 
) 
BEGIN 
    select MIN(price) INTO min from order; 
    select AVG(price) into avg from order; 
    select MAX(price) into max from order; 
END;  
分析:

1、out表示,后面的 min、avg、max变量中,可以用来保存存储过程的结果,以8个整数、2位小数点的格式进行保存。
2、BEGIN 和 END 之间代码,表示存储过程的逻辑和流程, INTO 表示把结果存入 后面的变量中,
以上的代码意思:
把order表中的 price的最小值、平均值、最大值 分别存入 min、avg、max变量中

调用:
call procedureName(@min,@avg,@max)

此调用并没有产生任何输出,只是暂时把值存入到 调用时传入的(@min,@avg,@max)变量中,
输出还需要调用如下

select @min,@avg,@max

<strong>使用IN参数的存储过程</strong>

create procedure getTotalById ( 
    in userId int, 
    out total decimal(8,2) 
) 
BEGIN 
    select SUM(o.totalMoney) from order o
    where o.userId= userId 
    into total; 
END;  

调用如下:

call getTotalById(1, @total); 
select @total;  

以上是存储过程比较简单的实例,如果要想了解复杂点的存储过程,敬请等待接下去的文章。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,991评论 19 139
  • 1. Java基础部分 基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语...
    子非鱼_t_阅读 31,767评论 18 399
  • importUIKit classViewController:UITabBarController{ enumD...
    明哥_Young阅读 3,896评论 1 10
  • 一. Java基础部分.................................................
    wy_sure阅读 3,838评论 0 11
  • 人的情绪不断处于循环之中 极端的情绪(极端兴奋,极端低落)都降低人的发挥 情绪自控使情绪波动曲线变得平缓认识到情绪...
    hxiaom阅读 253评论 0 0