MySQL流程控制之while、repeat、loop循环

 2625

本篇文章给大家带来了关于mysql的相关知识,主要介绍了MySQL存储过程之流程控制whilerepeatloop循环,循环中的代码会运行特定的次数,或者是运行到特定条件成立时结束循环,下面一起来看一下,希望对大家有帮助。

MySQL流程控制之while、repeat、loop循环

前言

循环是一段在程序中只出现一次,但可能会连续运行多次的代码。

循环中的代码会运行特定的次数,或者是运行到特定条件成立时结束循环。

MySQL流程控制之while、repeat、loop循环


循环分类:

while

repeat

loop

循环控制:

leave 类似于 break,跳出,结束当前所在的循环

iterate类似于 continue,继续,结束本次循环,继续下一次


while循环

  1. 【标签:】while 循环条件 do
  2. 循环体;
  3. end while【 标签】;
  1. -- 创建测试表
  2. create table user (
  3. uid int primary_key,
  4. username varchar ( 50 ),
  5. password varchar ( 50 )
  6. );
  1. -- -------存储过程-while
  2. delimiter $$
  3. create procedure proc16_while1(in insertcount int)
  4. begin
  5. declare i int default 1;
  6. label:while i<=insertcount do
  7. insert into user(uid,username,`password`) values(i,concat('user-',i),'123456');
  8. set i=i+1;
  9. end while label;
  10. end $$
  11. delimiter ;
  12. call proc16_while(10);

存储过程语法是固定的:delimiter $$ create peocedure 循环名(参数)begin 代码 end $$ delimiter;

注意在写循环体的时候,必须要要有定义循环的初识变量,采用declare i int default 默认值

然后就是dlabel:while 判断条件 do 循环体 end while label; end && 必须要有

  1. -- -------存储过程-while + leave
  2. truncate table user;
  3. delimiter $$
  4. create procedure proc16_while2(in insertcount int)
  5. begin
  6. declare i int default 1;
  7. label:while i<=insertcount do
  8. insert into user(uid,username,`password`) values(i,concat('user-',i),'123456');
  9. if i=5 then leave label;
  10. end if;
  11. set i=i+1;
  12. end while label;
  13. end $$
  14. delimiter ;
  15. call proc16_while2(10);

如果在内部需要跳出循环的话,采用if 判断 ,但是最后需要end if 结尾

这里的leave就是 跳出循环,相对于break

  1. -- -------存储过程-while+iterate
  2. truncate table user;
  3. delimiter $$
  4. create procedure proc16_while3(in insertcount int)
  5. begin
  6. declare i int default 1;
  7. label:while i<=insertcount do
  8. set i=i+1;
  9. if i=5 then iterate label;
  10. end if;
  11. insert into user(uid,username,`password`) values(i,concat('user-',i),'123456');
  12. end while label;
  13. end $$
  14. delimiter ;
  15. call proc16_while3(10);

这里的iterate 相对于continue 遇到就不执行下面的代码


repeat循环

  1. [标签:]repeat
  2. 循环体;
  3. until 条件表达式
  4. end repeat [标签];
  1. -- -------存储过程-循环控制-repeat
  2. use mysql7_procedure;
  3. truncate table user;
  4. delimiter $$
  5. create procedure proc18_repeat(in insertCount int)
  6. begin
  7. declare i int default 1;
  8. label:repeat
  9. insert into user(uid, username, password) values(i,concat('user-',i),'123456');
  10. set i = i + 1;
  11. until i > insertCount
  12. end repeat label;
  13. select '循环结束';
  14. end $$
  15. delimiter ;
  16. call proc18_repeat(100);

这个相对于是,无论如何都会执行一次的循环,然后是在内部进行判断,如果满足了就直接跳出


loop循环

  1. [标签:] loop
  2. 循环体;
  3. if 条件表达式 then
  4. leave [标签];
  5. end if;
  6. end loop;
  1. -- -------存储过程-循环控制-loop
  2. truncate table user;
  3.  
  4. delimiter $$
  5. create procedure proc19_loop(in insertCount int)
  6. begin
  7. declare i int default 1;
  8. label:loop
  9. insert into user(uid, username, password) values(i,concat('user-',i),'123456');
  10. set i = i + 1;
  11. if i > 5
  12. then
  13. leave label;
  14. end if;
  15. end loop label;
  16. select '循环结束';
  17. end $$
  18. delimiter ;
  19. call proc19_loop(10);

这个和repeat不同的是,需要执行之后,利用leave 跳出循环,无论是使用哪种都可以达到我们需要的效果,但是在业务中的应用场景,while还是相对比较的多。


本文网址:https://www.zztuku.com/detail-12818.html
站长图库 - MySQL流程控制之while、repeat、loop循环
申明:本文转载于《脚本之家》,如有侵犯,请 联系我们 删除。

评论(0)条

您还没有登录,请 登录 后发表评论!

提示:请勿发布广告垃圾评论,否则封号处理!!

    编辑推荐