大家好,欢迎来到IT知识分享网。
流程控制结构有三种,顺序结构、分支结构、循环结构。
顺序结构:程序从下往下依次执行。 分支结构:程序从两条或多条路径中选择一条来执行。 循环结构:程序满足一定条件下,重复执行一段代码。
本文整理MySQL循环结构相关内容。
什么是MySQL的循环结构
分类
三种:while、loop、repeat
循环控制
iterate: 类似于java中的continue,继续,即结束当前循环,继续下一次。
leave:类似于java中的break,跳出,结束当前所在的循环。
语法
wile
【标签:】while 循环的条件 do 循环体; end while 【标签】
标签相当于给循环起一个名字,这样可以搭配循环控制使用,是可选的,没有就是一个普通的循环。
loop
【标签:】loop 循环体; end loop 【标签】
loop没有循环条件,可以模拟简单的死循环,想要中途跳出可以使用leave。
repeat
【标签:】 repeat 循环体; until 结束循环的条件 end repeat【标签】
repeat有点类似do while,肯定会执行一次循环体。
以while循环做些实例,只要掌握了while循环的使用,那么其他的也相差无几。
一、无循环控制
先建一张user表用于测试,字段id是主键,并且自增,还有有name和password字段。
CREATE TABLE user ( `id` int(11) NOT NULL AUTO_INCREMENT, `name` varchar(255) DEFAULT NULL, `password` varchar(255) DEFAULT NULL, PRIMARY KEY (`id`) )
一个简单的问题,根据传入的次数向user表插入多条记录。
我们可以选择额头存储过程或者函数,因为问题没有涉及到返回值,所以选择写一个存储过程。
在java,while循环我们可以这么做:
int i = 0; while(i < n){ …… i++; }
到MySQL中也是同样思路
delimiter & create PROCEDURE p1(in n int) BEGIN DECLARE i int default 1;#定义i变量,默认值1 while i <= n DO insert into user(name,password) VALUES (CONCAT('john',i),''); set i = i+1;#i++ end while; end &
例中while循环也可以加上名字,不过没有使用到循环控制,所以名字有没有也无所谓。插入name和password,name用单词john拼接了i,方便查看。测试简单点,插入10条数据
mysql> call p1(10)& Query OK, 1 row affected (0.43 sec)
看一下user表数据
已经插入了10条语句。
二、使用leave
用上面的例子改变一下,当次数大于20的时候停止循环。
delete from user& create PROCEDURE p2(in n int) BEGIN DECLARE i int default 1;#定义i变量,默认值1 a:while i <= n DO #判断 if i > 20 then leave a; end if; #插入 insert into user(name,password) VALUES (CONCAT('john',i),''); #i++ set i = i+1; end while a; end &
先把表数据都删除。创建存储过程p2,在插入之前判断次数是否大于20次,用到了if结构,而且使用leave跳出循环,此时要加循环加上标签也就是名字。
传入100测试
mysql> call p2(100)& Query OK, 1 row affected (0.84 sec)
看一下表中现在有多少条数据。
一共只有20条数据,那么说明判断是有效果的。
三、使用iterate
问题再改一下,这次只插入偶数次的记录。
java判断偶数可以这样:i%2==0,而MySQL中可以使用MOD函数。看一下存储过程写法
create PROCEDURE p3(in n int) BEGIN DECLARE i int default 0;#定义i变量,默认值1 a:while i <= n DO set i = i+1;#i++ if mod(i,2) !=0 then ITERATE a; end if; insert into user(name,password) VALUES (CONCAT('john',i),''); end while a; end &
这次变量 i 的默认值改为0,i 要先自增,再判断它是否是偶数,mod函数值不等于0则说明不是偶数,结束当前循环,即不能执行插入语句。
传入100测试一下,测试前先把数据都删除。
delete from user& mysql> call p3(100)& Query OK, 1 row affected (1.86 sec)
查看一下数据
一共50条数据,从name的值可以看到,插入的都是偶数。
好了,关于循环就到此,了解了一下怎么使用。使用while从无循环控制,到使用leave和iterate循环控制都简单地举了例子,这些问题使用其他两个循环结构也可以完成,可以自己测试一下。
免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://yundeesoft.com/48936.html