文章链接:https://codemouse.online/archives/354846877687
存储过程
存储过程和自定义函数是事先经过编译并存储在数据库中的一段SQL语句集合
存储过程参数可以使用 in out inout 函数只能使用in
函数必须要有返回值 存储过程没有返回值
无参存储过程
–查找平均花费高的两个客户
create procedure getMaxAvgCost()beginselect customer,avg(price)from ordersgroup by customerorder by avg(price) desclimit 2;end;
–调用存储过程
call getMaxAvgCost();
–修改
alter procedure getMaxAvgCost();
–查看存储过程信息
show create procedure getMaxAvgCost;
–删除存储过程
drop procedure getMaxAvgCost;
带参存储过程
–获取指定日期最大单笔订单
create procedure getMaxByDate(in odate date)beginselect customer,max(price)from orderswhere orderdate=odate;end;使用:call getmaxbydate('-9-21');
–使用存储过程插入数据
create procedure insertTbOrders(in oid int,in oprice int,in odate date,in ocus varchar(22))begininsert into orders values(oid,oprice,odate,ocus);select * from orders where id=oid;end;call insertTbOrders(8,400,'-9-28','danny');call insertTbOrders(7,200,'-9-28','danny');
–删除
create procedure deleteOrders(in oid int)
begin
delete from orders where id=oid;
end;
call deleteOrders(7);
变量
数据在内存中存储可以变化的值或者一个名字
局部变量
声明用declare,可以用default来指定默认值
create procedure getsum(in a int, in b int)begindeclare c int default 0;set c=a+b;select c as '和';end;call getsum(21,34);
–用户变量
作用于当前整个连接
set @x=10;
set @y=24;
select @sum:=(@x+@y) as sum;
–会话变量
作用域限于当前客户端连接
show session variables;
–全局变量
作用域为整个服务,但不能跨重启(一个@是用户变量,两个@是全局)
select @@version;
自定义函数(可以省略in)
返回值写返回类型
create function getGrade(mark int)returns varchar(20)beginreturn(case floor(mark/10)when 5 then '不及格'when 6 then '继续努力'when 7 then '成绩良好'else '成绩优秀'end);end;select getGrade(100);
流程控制
begin… end程序块语句将多条sql语句封装起来构成程序块
create procedure test1()begindeclare x int;declare y date;beginset x=100;set y='-9-28';select x,y;end;end;call test1;
if判断语句
用于条件判断,if语句要用end if结束
create procedure test2( in x int)beginif x>100 thenselect 'perfect';elseif x=100 thenselect 'great';else select 'good';end if;end;
case分支语句
计算条件列表并返回多个可能结果表达式
create procedure test3(in score int)begincase scorewhen 1 thenselect 'A';when 2 thenselect 'B';when 3 thenselect 'C';else select 'D';end case;end;case test3(2);
while循环语句
设置重复执行sql语句或语句块的条件,只要指定的条件为真,就重复执行
create procedure test4(out sum int)begindeclare i int default 1;declare s int default 0;while i<=10 doset s=s+i;set i=i+1;end while;set sum=s;end;call test4(@s);select @s;
loop循环语句
没有循环条件 通过leave退出循环(leave相当于break)
create procedure test5()begindeclare i int default 0;s:loopset i=i+1;if i=11 thenleave s;end if;end loop;select i;end;
repeat循环语句
先执行一次循环体,在判断循环条件,为真退出循环,否则继续执行循环
create procedure test6()begindeclare i int default 0;repeatset i=i+1;until i>11end repeat;select i;end;
如果觉得《mysql存储过程 函数 变量与流程控制》对你有帮助,请点赞、收藏,并留下你的观点哦!