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,直接结束循环。

浙公网安备 33010602011771号