MySQL存储过程之流程控制while,repeat,loop循环

2022-07-11 19:59:25
目录
前言while循环repeat循环loop循环

前言

    循环是一段在程序中只出现一次,但可能会连续运行多次的代码。循环中的代码会运行特定的次数,或者是运行到特定条件成立时结束循环。

    循环分类:

      whilerepeatloop

      循环控制:

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

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

      while循环

      【标签:】while 循环条件 do
      循环体;
      end while【 标签】;
      -- 创建测试表
      create table user (
      uid int primary_key,
      username varchar ( 50 ),
      password varchar ( 50 )
      );
      -- -------存储过程-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 && 必须要有

      -- -------存储过程-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

      -- -------存储过程-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循环

      repeat
      循环体;
      until 条件表达式
      end repeat [标签];
      -- -------存储过程-循环控制-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循环

       loop
      循环体;
      if 条件表达式 then
      leave [标签];
      end if;
      end loop;
      -- -------存储过程-循环控制-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存储过程 内容请搜索易采站长站以前的文章或继续浏览下面的相关文章希望大家以后多多支持易采站长站!