前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >MySQL数据库,详解流程控制语句(三)

MySQL数据库,详解流程控制语句(三)

作者头像
用户1289394
发布2021-11-23 15:27:35
5810
发布2021-11-23 15:27:35
举报
文章被收录于专栏:Java学习网Java学习网

循环

mysql中循环有3种写法

1. while:类似于java中的while循环

2. repeat:类似于java中的do while循环

3. loop:类似于java中的while(true)死循环,需要在内部进⾏控制。

循环控制

对循环内部的流程进⾏控制,如:

结束本次循环

类似于java中的continue

iterate 循环标签;

退出循环

类似于java中的break

leave 循环标签;

下⾯我们分别介绍3种循环的使⽤。

while循环

类似于java中的while循环。语法

[标签:]while 循环条件 do

循环体

end while [标签];

标签:是给while取个名字,标签和iterate、leave结合⽤于在循环内部对循环

进⾏控制:如:跳出循环、结束本次循环。

注意:这个循环先判断条件,条件成⽴之后,才会执⾏循环体,每次执⾏都会先

进⾏判断。

示例1:⽆循环控制语句

根据传⼊的参数v_count向test1表插⼊指定数量的数据。

/*删除test1表记录*/

DELETE FROM test1;

/*删除存储过程*/

DROP PROCEDURE IF EXISTS proc3;

/*声明结束符为$*/

DELIMITER $

/*创建存储过程*/

CREATE PROCEDURE proc3(v_count int)

BEGIN

DECLARE i int DEFAULT 1;

a:WHILE i<=v_count DO

INSERT into test1 values (i);

SET i=i+1;

END WHILE;

END $

/*结束符置为;*/

DELIMITER ;

见效果:

mysql> CALL proc3(5);

Query OK, 1 row affected (0.01 sec)

mysql> SELECT * from test1;

+---+| a |

+---+

| 1 |

| 2 |

| 3 |

| 4 |

| 5 |

+---+

5 rows in set (0.00 sec)

示例2:添加leave控制语句

根据传⼊的参数v_count向test1表插⼊指定数量的数据,当插⼊超过10条,结

束。

/*删除存储过程*/

DROP PROCEDURE IF EXISTS proc4;

/*声明结束符为$*/

DELIMITER $

/*创建存储过程*/

CREATE PROCEDURE proc4(v_count int)

BEGIN

DECLARE i int DEFAULT 1;

a:WHILE i<=v_count DO

INSERT into test1 values (i);

/*判断i=10,离开循环a*/

IF i=10 THEN

LEAVE a;

END IF;

SET i=i+1;

END WHILE;

END $

/*结束符置为;*/

DELIMITER ;

见效果:

mysql> DELETE FROM test1;

Query OK, 20 rows affected (0.00 sec)mysql> CALL proc4(20);

Query OK, 1 row affected (0.02 sec)

mysql> SELECT * from test1;

+----+

| a |

+----+

| 1 |

| 2 |

| 3 |

| 4 |

| 5 |

| 6 |

| 7 |

| 8 |

| 9 |

| 10 |

+----+

10 rows in set (0.00 sec)

示例3:添加iterate控制语句

根据传⼊的参数v_count向test1表插⼊指定数量的数据,只插⼊偶数数据。

/*删除test1表记录*/

DELETE FROM test1;

/*删除存储过程*/

DROP PROCEDURE IF EXISTS proc5;

/*声明结束符为$*/

DELIMITER $

/*创建存储过程*/

CREATE PROCEDURE proc5(v_count int)

BEGIN

DECLARE i int DEFAULT 0;

a:WHILE i<=v_count DO

SET i=i+1;

/*如果i不为偶数,跳过本次循环*/

IF i%2!=0 THEN

ITERATE a;

END IF; /*插⼊数据*/

INSERT into test1 values (i);

END WHILE;

END $

/*结束符置为;*/

DELIMITER ;

见效果:

mysql> DELETE FROM test1;

Query OK, 5 rows affected (0.00 sec)

mysql> CALL proc5(10);

Query OK, 1 row affected (0.01 sec)

mysql> SELECT * from test1;

+----+

| a |

+----+

| 2 |

| 4 |

| 6 |

| 8 |

| 10 |

+----+

5 rows in set (0.00 sec)

示例4:嵌套循环

test2表有2个字段(a,b),写⼀个存储过程(2个参数:vacount,vbcount),使

⽤双重循环插⼊数据,数据条件:a的范围[1,vacount]、b的范围[1,vbcount]所有

偶数的组合。

/*删除存储过程*/

DROP PROCEDURE IF EXISTS proc8;

/*声明结束符为$*/

DELIMITER $

/*创建存储过程*/

CREATE PROCEDURE proc8(v_a_count int,v_b_count int)

BEGIN DECLARE v_a int DEFAULT 0;

DECLARE v_b int DEFAULT 0;

a:WHILE v_a<=v_a_count DO

SET v_a=v_a+1;

SET v_b=0;

b:WHILE v_b<=v_b_count DO

SET v_b=v_b+1;

IF v_a%2!=0 THEN

ITERATE a;

END IF;

IF v_b%2!=0 THEN

ITERATE b;

END IF;

INSERT INTO test2 VALUES (v_a,v_b);

END WHILE b;

END WHILE a;

END $

/*结束符置为;*/

DELIMITER ;

代码中故意将ITERATE a;放在内层循环中,主要让⼤家看⼀下效果。

见效果:

mysql> DELETE FROM test2;

Query OK, 6 rows affected (0.00 sec)

mysql> CALL proc8(4,6);

Query OK, 1 row affected (0.01 sec)

mysql> SELECT * from test2;

+---+---+

| a | b |+---+---+

| 2 | 2 |

| 2 | 4 |

| 2 | 6 |

| 4 | 2 |

| 4 | 4 |

| 4 | 6 |

+---+---+

6 rows in set (0.00 sec)

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2021-11-20,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Java学习网 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
云数据库 SQL Server
腾讯云数据库 SQL Server (TencentDB for SQL Server)是业界最常用的商用数据库之一,对基于 Windows 架构的应用程序具有完美的支持。TencentDB for SQL Server 拥有微软正版授权,可持续为用户提供最新的功能,避免未授权使用软件的风险。具有即开即用、稳定可靠、安全运行、弹性扩缩等特点。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档