最近项目经理让我给新的活动的预留一个插入红包和查看详情的sql,方便在项目出问题的做一些紧急操作,我想了下这里面还涉及到挺多逻辑和挺多表的一句句查也不方便啊,干脆写到存储过程里,于是开始在navicat写存储过程,因为是第一次写,在此记录一下,方便下次查看
(•̀ᴗ•́)و ̑̑。

1:选择新建函数。

利用navicat写mysql的存储过程-LMLPHP

2:新建函数后会出现下面的界面,要是你不确定存储过程的输入输出值,可以直接点击完成,在里面的编辑的时候再加上这些参数,若是已经确定参数可以点击下一步填写相关参数。

利用navicat写mysql的存储过程-LMLPHP

3:如果上一步点击的是下一步的话,就会出现下面的界面,各个参数的含义在界面右面的描述中有,其实用惯的也能猜出来,模式的命名也是见名知意的。

IN:存储过程运行时需要输入的参数,也就是入参。

OUT:储存过程运行后的返回值,也就是出参。

INOUT:既是入参也是出参。

利用navicat写mysql的存储过程-LMLPHP

4:填完后点确认就会有下面的界面,navicat会给我们初识化好基本格式,如下:

利用navicat写mysql的存储过程-LMLPHP

5:现在我们就可以在begin和end直接编辑我们的语句,下面介绍存储过程中常用的操作。

1):定义一个变量如下,使用 DECLARE修饰变量,后面跟变量名,变量的数据类型和大小;

DECLARE u1  bigint(20);

2):有了变量,我们就可以开始做赋值操作,先来个简单的单个变量的赋值,如下直接使用SET变量名前使用@修饰,可以直接赋值也可以将入参赋值给变量,如下,将入参userId赋值给变量u1;


  1. SET @u1 = 89893;
  2. SET @u1 = userId;

3):我们还可以将查询语句的结果赋值给变量如下,使用同单个变量的赋值类似,只需将查询的查询sql括起来就好了;


  1. SET
  2. @t1 = (SELECT team_id FROM t_team_member WHERE user_id = @u1);

4):有了查询的单列赋值,我们再说下多列赋值,如果查询的返回值有多个列我们可以做如下的操纵,我们将查询出来的结果team_id和id分别赋值给t1和m1变量,

上面的单列赋值用SET,多列赋值使用的是一个SELECT…… INTO 。


  1. SELECT team_id,id INTO
  2. @t1,@m1
  3. FROM t_team_member WHERE user_id = @u1;

5):说完了各种变量的赋值操作,我们还需要将结果返回,返回结果集的操作如下:SELECT @变量名  ( 变量名间用逗号分隔);

SELECT @max_effective_amount,@teamInvisitAmount

6):逻辑判断时,在存储过程中也能使用IF…… ELSE 格式为: IF(判断的条件) THEN 满足if条件做的操作 ELSE 不满足if条件做的操作 END IF;


  1. if(@invisitAmount>@max_effective_amount) THEN
  2. SET @invisitAmount= @max_effective_amount;
  3. end if;

7):前面有说过一开始不确定入参和出参可以之后再编辑,编辑的参数的格式为: 【IN、OUT、INOUT】【参数名】 【参数的数据类型】,编写完成后就可以点击运行,

会弹出如下的输入参数框,如果入参有多个参数的话,可以按顺序用逗号分隔填入。

利用navicat写mysql的存储过程-LMLPHP


8):运行结果如下,允许有多个结果集,也就是多个SELECT 变量名 (多个变量中间用逗号分隔):

SELECT @u1,@newInvisit,@oldInvisit;

利用navicat写mysql的存储过程-LMLPHP

05-23 13:52