云计算学习100天-第53天-MySQL数据库学习9
目录
MySQL存储过程的流程控制
if判断结构
格式1:
if 条件 then
语句;
end if;
格式2:
if 条件 then
语句1;
else
语句2;
end if;
格式3:
if 条件1 then
语句1;
elseif 条件2 then
语句2;
else
语句3;
end if;
示例:
delimiter //
create proucedure tarena.deptype_pro( in no int,out dept_type varchar(5))
begin
declare type varchar(5);
select dept_name into type from tarena.repartments where dept_id=no;
if type=’运维部’ then
set dept_type=’技术部’;
elseif type=’开发部’ then
set dept_type=’技术部’;
elseif type=’测试部’ then
set dept_type=’技术部’;
else
set dept_type=’非技术部’;
end if;
end //
delimiter;
case分支结构
格式:
case 变量|表达式|字段
when 判断的值1 then 返回值1;
when 判断的值2 then 返回值2;
... ...
else 返回值 n;
end case;
示例:
delimiter //
create proucedure tarena.deptype_pro2( in no int,out dept_type varchar(5))
begin
declare type varchar(5);
select dept_name into type from tarena.departments where dept_id=no;
case type
when ’运维部’ then set dept_type=’技术部’;
when ’开发部’ then set dept_type=’技术部’;
when ’测试部’ then set dept_type=’技术部’;
else
set dept_type=’非技术部’;
end case;
end //
delimiter;
循环结构
while 循环结构:
条件判断成立时,重复执行同一段但没
如果第一次判断条件就不成立,会直接结束循环
语法格式:
while 判断条件 do
代码
end while;
示例:
//根据输入的数字(变量i)决定执行几遍插入语句,整数大于1就会插入数据
delimiter //
create proucedure tarena.while_pro( in i int )
begin
declare j int default 1;
while j<i do
insert into tarena.departments(dept_name) values(‘hr’);
set j=j+1;
end while;
end //
delimiter;
loop循环结构:
没有判断条件,重复执行同一段代码,只要不人为结束就一直执行,称为死循环
语法格式:
loop
代码
end loop;
示例:
//暂停1秒 输出1
delimiter //
create proucedure tarena.loop()
begin
declare i int default 1;
loop
select sleep(1),i;
end loop;
end //
delimiter;
//调用后就死循环
call tarena.loop();
ctrl+C也结束不了,只有另开一个终端,进入数据库
在mysql登录状态下,查看正在执行的命令
show processlist;
Id User Host db Command Time ...
3 root localhost tarena Query 1 ...
在mysql登录状态下,终止正在执行的命令
kill 3;
repeat循环结构:
至少循环一次
因为先执行循环体,再判断条件
判断条件不成立时继续执行,判断条件成立时结束循环
语法格式:
repeat
循环体
until 判断条件
end repeat;
示例:
//j的从2开始,先插入数据,然后判断j是否大于i,成立就跳出循环,否则就继续插入数据
delimiter //
create proucedure tarena.repeat_pro( in i int )
begin
declare j int default 1;
repeat
set j=j+1;
insert into tarena.deprtments(dept_name) values(‘sales’);
until j>i;
end repeat;
end //
delimiter;
循环控制命令
leave 跳出循环,相当于break
iterate 终止当前循环并开始下次循环,相当于continue
格式:
leave 循环名
iterate 循环名
给循环定义名字
名称:while 判断条件 do
代码
end while 名称;
示例:
//直接跳出循环,select命令都没执行
delimiter //
create proucedure tarena.p2()
begin
xyz:loop
leave xyz;
select sleep(1);
select “one”;
end loop xyz;
end //
delimiter;
//j=5就结束本次循环
delimiter //
create proucedure tarena.p3()
begin
declare j int default 1;
zzz:while j<=i do
if j=5 then
set j=j+1;
iterate zzz;
end if
select j;
set j=j+1;
end while zzz;
end //
delimiter;
更多推荐



所有评论(0)