第七节:循环结构

一、循环结构

  1、循环结构

      程序在满足一定条件的基础上,重复执行一段代码。

      循环结构只能放在 begin end 中!

  2、分类

      while、loop、repeat

  3、循环控制

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

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

  4、三种循环的对比

    (1)这三种循环都可以省略名称,但如果循环中添加了循环控制语句(leave或iterate)则必须添加名称;

    (2)loop 一般用于实现简单的死循环;

        while 先判断后执行;

       repeat 先执行后判断,无条件至少执行一次;

二、while 循环

  1、语法格式

【标签:】while 循环条件 do
	循环体;
end while【标签】;

  

三、loop 循环

  1、语法结构

【标签:】loop
	循环体;
end loop 【标签】;

    可以用来模拟简单的死循环。

四、repeat 循环

  1、语法结构

【标签:】repeat
	循环体;
until 结束循环的条件
end repeat 【标签】;

  

五、案例

  1、批量插入,根据次数插入到 admin 表中多条记录

    没有添加循环控制语句:

 1 DROP PROCEDURE pro_while1$
 2 CREATE PROCEDURE pro_while1(IN insertCount INT)
 3 BEGIN
 4     DECLARE i INT DEFAULT 1;
 5     WHILE i<=insertCount DO
 6         INSERT INTO admin(username,`password`) VALUES(CONCAT('Rose',i),'666');
 7         SET i=i+1;
 8     END WHILE;
 9     
10 END $
11 
12 CALL pro_while1(100)$

  2、批量插入,根据次数插入到admin表中多条记录,如果次数>20则停止

    使用标签和leave语句:

 1 TRUNCATE TABLE admin$
 2 DROP PROCEDURE test_while1$
 3 CREATE PROCEDURE test_while1(IN insertCount INT)
 4 BEGIN
 5     DECLARE i INT DEFAULT 1;
 6     a:WHILE i<=insertCount DO
 7         INSERT INTO admin(username,`password`) VALUES(CONCAT('xiaohua',i),'0000');
 8         IF i>=20 THEN LEAVE a;
 9         END IF;
10         SET i=i+1;
11     END WHILE a;
12 END $
13 
14 
15 CALL test_while1(100)$

  3、批量插入,根据次数插入到admin表中多条记录,只插入偶数次

    使用 iterate 语句和标签

 1 TRUNCATE TABLE admin$
 2 DROP PROCEDURE test_while1$
 3 CREATE PROCEDURE test_while1(IN insertCount INT)
 4 BEGIN
 5     DECLARE i INT DEFAULT 0;
 6     a:WHILE i<=insertCount DO
 7         SET i=i+1;
 8         IF MOD(i,2)!=0 THEN ITERATE a;
 9         END IF;
10         
11         INSERT INTO admin(username,`password`) VALUES(CONCAT('xiaohua',i),'0000');
12         
13     END WHILE a;
14 END $
15 
16 
17 CALL test_while1(100)$

  4、流程控制综合案例

    已知表stringcontent,其中字段:id 自增长,content varchar(20)。向该表插入指定个数的,随机的字符串:

    (1)创建表:

1 DROP TABLE IF EXISTS stringcontent;
2 
3 CREATE TABLE stringcontent(
4     id INT PRIMARY KEY AUTO_INCREMENT,
5     content VARCHAR(20)
6     
7 );

    (2)创建存储结构

 1 DELIMITER $
 2 CREATE PROCEDURE test_randstr_insert(IN insertCount INT)
 3 BEGIN
 4     DECLARE i INT DEFAULT 1;
 5     DECLARE str VARCHAR(26) DEFAULT 'abcdefghijklmnopqrstuvwxyz';
 6     DECLARE startIndex INT;#代表初始索引
 7     DECLARE len INT;#代表截取的字符长度
 8     WHILE i<=insertcount DO
 9         SET startIndex=FLOOR(RAND()*26+1);#代表初始索引,随机范围1-26
10         SET len=FLOOR(RAND()*(20-startIndex+1)+1);#代表截取长度,随机范围1-20-startIndex+111         INSERT INTO stringcontent(content) VALUES(SUBSTR(str,startIndex,len));
12         SET i=i+1;
13     END WHILE;
14 
15 END $
16 
17 CALL test_randstr_insert(10)$
原文地址:https://www.cnblogs.com/niujifei/p/15009563.html