MySQL存储过程

MySQL常用的增删查改基本上没有问题,想学一下复杂的存储过程

定义:一个存储过程是一个可编程的函数,它在数据库中创建并保存。它可以有SQL语句和一些特殊的控制结构组成。当希望在不同的应用程序或平台上执行相同的函数,或者封装特定功能时,存储过程是非常有用的。数据库中的存储过程可以看做是对编程中面向对象方法的模拟。它允许控制数据的访问方式。

 存储过程

CREATEPROCEDURE 存储过程名([[IN |OUT |INOUT ] 参数名 数据类形…])

参数

MySQL存储过程的参数用在存储过程的定义,共有三种参数类型,IN,OUT,INOUT,形式如:

IN 输入参数:表示该参数的值必须在调用存储过程时指定,在存储过程中修改该参数的值不能被返回,为默认值
OUT 输出参数:该值可在存储过程内部被改变,并可返回
INOUT 输入输出参数:调用时指定,并且可被改变和返回

工具:Navicat for mysql

获取地址:https://pan.baidu.com/s/1rap4Pic 密码:kgwl

创建过程:

(1)选择一个数据库,点击函数->新建函数->过程->下一步

(2)输入参数->完成,此参数为存储过程的传入参数

语法:

 1.if-elseif-else-endif 条件语句

黄色部分为语法

 1 BEGIN
 2 DECLARE var int;
 3 set var=p+1;
 4 if var=1 then 
 5     insert into t VALUES(100); 
 6 ELSEIF var=2 THEN
 7     insert into t VALUES(200);
 8 ELSE
 9     insert into t VALUES(300);
10 end if;
11 END

输入参数0,t表增加一个记录:100;

输入1,增加记录:200;

输入2,增加记录:300.

2.case语句:

黄色部分为语法

 1 BEGIN
 2 declare var int;
 3 set var=p+1;
 4 case var
 5 when 0 THEN
 6   insert into t values(11);
 7 when 1 THEN
 8   insert into t values(13);
 9 ELSE
10   insert into t values(19);
11 end case;
12 END

运行时分别输入参数:-1,0,1

查看表t的s列新增三条结果:11,13,19

3.while循环

黄色部分为语法

1 BEGIN
2 declare var int;
3 set var=0;
4 while var<5 DO
5      insert into t VALUES(var);
6      set var=var+1;
7 end while;
8 END

 查看表t的s列新增三条结果:0,1,2,3,4

4.repeat···· end repeat:

它在执行操作后检查结果,而while则是执行前进行检查。

1 BEGIN
2 DECLARE var int;
3 set var=5;
4 repeat
5     insert into t values(var);
6     set var=var+1;
7 UNTIL var>=10
8 end repeat;
9 END

查看表t的s列新增三条结果:0,1,2,3,4,5

5.loop ·····end loop:

loop循环不需要初始条件,这点和while 循环相似,同时和repeat循环一样不需要结束条件, leave语句的意义是离开循环。

 1 BEGIN
 2 DECLARE var int;
 3 set var=20;
 4 LOOP_LABLE:LOOP
 5     insert into t values(var);
 6     set var=var+1;
 7     if var>=25 THEN
 8         leave LOOP_LABLE;
 9     END IF;
10 end LOOP;
11 END

查看表t的s列新增三条结果:20,21,22,23,24

6.ITERATE语句

ITERATE语句也是用来跳出循环的语句。但是,ITERATE语句是跳出本次循环,然后直接进入下一次循环。

ITERATE语句只可以出现在LOOP、REPEAT、WHILE语句内。

 1 BEGIN
 2 DECLARE var int;
 3 set var=30;
 4 LOOP_LABLE:LOOP
 5     if MOD(var,3)=0 then 
 6         set var=var+1;
 7         ITERATE LOOP_LABLE;
 8     END IF;
 9     insert into t values(var);
10     set var=var+1;
11     if var>=40 then 
12         leave LOOP_LABLE;
13     end if;
14 end loop;
15 END

查看表t的s列新增三条结果:31,32,34,35,37,38,40

ITERATE类似于C语言中的continue,会跳出本次循环进入下一个循环,而leave类似C语言的Break,直接结束循环。

 

posted @ 2018-02-02 13:24  花开不只在春天  阅读(171)  评论(0)    收藏  举报