MySQL存储过程之流程控制while,repeat,loop循环
目录
- 前言
- while循环
- repeat循环
- loop循环
前言
- 循环是一段在程序中只出现一次,但可能会连续运行多次的代码。
- 循环中的代码会运行特定的次数,或者是运行到特定条件成立时结束循环。
循环分类:
- while
- repeat
- loop
循环控制:
leave 类似于 break,跳出,结束当前所在的循环
iterate类似于 continue,继续,结束本次循环,继续下一次
while循环
?1 2 3 | 【标签:】while 循环条件 do 循环体; end while【 标签】; |
1 2 3 4 5 6 | -- 创建测试表 create table user ( uid int primary_key, username varchar ( 50 ), password varchar ( 50 ) ); |
1 2 3 4 5 6 7 8 9 10 11 12 | -- -------存储过程-while delimiter $$ create procedure proc16_while1( in insertcount int ) begin declare i int default 1; label:while i<=insertcount do insert into user (uid,username,` password `) values (i,concat( 'user-' ,i), '123456' ); set i=i+1; end while label; end $$ delimiter ; call proc16_while(10); |
存储过程语法是固定的:delimiter $$ create peocedure 循环名(参数)begin 代码 end $$ delimiter;
注意在写循环体的时候,必须要要有定义循环的初识变量,采用declare i int default 默认值
然后就是dlabel:while 判断条件 do 循环体 end while label; end && 必须要有
?1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | -- -------存储过程-while + leave truncate table user ; delimiter $$ create procedure proc16_while2( in insertcount int ) begin declare i int default 1; label:while i<=insertcount do insert into user (uid,username,` password `) values (i,concat( 'user-' ,i), '123456' ); if i=5 then leave label; end if; set i=i+1; end while label; end $$ delimiter ; call proc16_while2(10); |
如果在内部需要跳出循环的话,采用if 判断 ,但是最后需要end if 结尾
这里的leave就是 跳出循环,相对于break
?1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | -- -------存储过程-while+iterate truncate table user ; delimiter $$ create procedure proc16_while3( in insertcount int ) begin declare i int default 1; label:while i<=insertcount do set i=i+1; if i=5 then iterate label; end if; insert into user (uid,username,` password `) values (i,concat( 'user-' ,i), '123456' ); end while label; end $$ delimiter ; call proc16_while3(10); |
这里的iterate 相对于continue 遇到就不执行下面的代码
repeat循环
?1 2 3 4 | [标签:]repeat 循环体; until 条件表达式 end repeat [标签]; |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | -- -------存储过程-循环控制-repeat use mysql7_procedure; truncate table user ; delimiter $$ create procedure proc18_repeat( in insertCount int ) begin declare i int default 1; label:repeat insert into user (uid, username, password ) values (i,concat( 'user-' ,i), '123456' ); set i = i + 1; until i > insertCount end repeat label; select '循环结束' ; end $$ delimiter ; call proc18_repeat(100); |
这个相对于是,无论如何都会执行一次的循环,然后是在内部进行判断,如果满足了就直接跳出
loop循环
?1 2 3 4 5 6 | [标签:] loop 循环体; if 条件表达式 then leave [标签]; end if; end loop; |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | -- -------存储过程-循环控制-loop truncate table user ; delimiter $$ create procedure proc19_loop( in insertCount int ) begin declare i int default 1; label:loop insert into user (uid, username, password ) values (i,concat( 'user-' ,i), '123456' ); set i = i + 1; if i > 5 then leave label; end if; end loop label; select '循环结束' ; end $$ delimiter ; call proc19_loop(10); |
这个和repeat不同的是,需要执行之后,利用leave 跳出循环,无论是使用哪种都可以达到我们需要的效果,但是在业务中的应用场景,while还是相对比较的多。
到此这篇关于MySQL存储过程之流程控制while,repeat,loop循环的文章就介绍到这了,更多相关MySQL存储过程 内容请搜索服务器之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持服务器之家!
原文链接:https://blog.51cto.com/u_15172991/5427800
1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,请转载时务必注明文章作者和来源,不尊重原创的行为我们将追究责任;3.作者投稿可能会经我们编辑修改或补充。