循环结构
/
分类:
while、loop、repeat
循环控制:
iterate类似于 continue,(继续),结束本次循环,继续下一次
leave 类似于break,跳出,结束当前所在的循环
/
#1.while
/
语法:
【标签:】while 循环条件 do
循环体;
end while 【标签】;
/
#2.loop (环、循环)
/
语法:
【标签:】loop
循环体;
end loop 【标签】;
loop没有循环条件,可以用来模拟简单的死循环
/
#3.repeat
/
语法:
【标签:】repeat
循环体;
until 结束循环的条件
end repeat 【标签】;
/
#没有添加循环控制语句
案例:批量插入,根据次数插入到admin表中多条记录
DROP PROCEDURE pro_while
DELIMITER $
CREATE PROCEDURE pro_while(IN insertCount INT)
BEGIN
DECLARE i INT DEFAULT 1;
WHILE i<=insertCount DO
INSERT INTO admin(username,password
) VALUE(CONCAT(‘Rose’,i),’666’);
SET i=i+1;
END WHILE;
END $
#调用
CALL pro_while(20)
#2.添加leave语句
#案例:批量插入,根据次数插入到admin表中多条记录,如果次数>20则停止
DELIMITER $
CREATE PROCEDURE test_while2(IN insertCount INT)
BEGIN
DECLARE i INT DEFAULT 1;
a:WHILE i<=insertCount DO
INSERT INTO admin(username,password
)VALUE(CONCAT(‘小红’,i),’777’);
IF i>=20 THEN LEAVE a;
END IF;
SET i=i+1;
END WHILE a;
END $
CALL test_while2(45)
#3.添加iterate语句
#案例:批量插入,根据次数插入到admin表中多条记录,只插入偶数次
DELIMITER $
CREATE PROCEDURE test_while3(IN insertCount INT)
BEGIN
DECLARE i INT DEFAULT 0;
a:WHILE i<=insertCount DO
SET i=i+1;
IF MOD(i,2)!=0 THEN ITERATE a;
END IF;
INSERT INTO admin(username,password
)VALUE(CONCAT(‘小黑’,i),’777’);
END WHILE a;
END $
CALL test_while3(30)
SELECT FROM admin
练习:
/
一、已知表stringcontent
其中字段:
id自增长
content varchar(20)
向该表插入指定个数的,随机的字符串
/
DROP TABLE IF EXISTS stringcontent;
#建表
CREATE TABLE stringcontent(
id INT PRIMARY KEY AUTO_INCREMENT,
content VARCHAR(20)
);
#构造存储过程
DELIMITER $
CREATE PROCEDURE test_reandstr_insert(IN insertCount INT)
BEGIN
DECLARE i INT DEFAULT 1;#定义一个循环变量i,表示插入次数
DECLARE str VARCHAR(26) DEFAULT ‘qwertyuioplkjhgfdsazxcvbnm’;
DECLARE startIndex INT DEFAULT 1;#代表起始索引
DECLARE len INT DEFAULT 1;#代表截取的字符的长度
WHILE i<=insertCount DO
SET len=FLOOR(RAND()(20-startIndex+1)+1);#产生一个随机的整数,代表截取的长度,1-(26-startIndex+1)
SET startIndex=FLOOR(RAND()*26+1);#产生一个随机的整数,代表起始索引1-26
INSERT INTO stringcontent(content) VALUES(SUBSTR(str,startIndex,len));
SET i=i+1;#循环变量更新
END WHILE;
END $
CALL test_reandstr_insert(10)