MYSQL(十)循环

本文深入探讨了SQL中的循环结构,包括while、loop和repeat,并通过实例展示了如何使用这些循环进行批量数据插入,特别关注循环控制语句如leave和iterate的应用。同时,介绍了生成随机字符串并批量插入特定表的方法。

分类:while   loop   repeat

循环控制:

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

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

 

while

语法:

[标签:]while循环条件 do 

   循环体;

end while [标签];

 

loop

语法:

[标签:]loop

           循环体

end loop [标签];

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

 

repeat

语法:

[标签:]repeat

             循环体;

until 结束循环的条件

end repeat [标签];

 

 

批量插入,根据次数插入到admin表中多条记录(没有添加循环控制语句)

CREATE PROCEDURE pro_while1(insertCount INT)

BEGIN

        DECLARE i INT default 1;

        WHILE i<=insertCount DO

               INSERT INTO admin(username,'password') values (concat('Rose',i),666);

               SET i=i+1;

         END WHILE;

END $

 

添加leave语句

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

TRUNCATE TABLE admin$

DROP PROCEDURE test_while1(IN insertCOUNT INT)$

BEGIN

            DECLARE i INT DEFAULT 1;

            a:WHILE  i<=insertCount DO

                           insert into admin(username,'password') values (concat('xiaohua',i)+'0000');

                            IF i>=20 THEN LEAVE a;

                            END IF;

                            SET i=i+1;

               END WHILE a;

END $

CALL test_while1(100)$

 

 

添加iterate语句

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

TRUNCATE TABLE admin$

DROP PROCEDURE test_while1(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') values (concat('xiaohua',i)+'0000');

                END WHILE a;

END $

CALL test_while1(100)$

 

 

已知表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_randstr_insert(IN insertCount INT)

BEGIN

            DECLARE i INT DEFAULT 1; #定义一个循环变量i,表示插入次数

            DECLARE str VARCHAR(26) DEFAULT 'abcdefghijklmnopqrstuvwxyz';

            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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值