MySQL数据库————流程控制(二)

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
云数据库 RDS MySQL,高可用系列 2核4GB
简介: MySQL数据库————流程控制(二)

四.循环结构


1.while·····do循环结构

while循环基本格式:

while 条件表达式 do 循环语句 end while;

如果while之后的条件满足则循环执行do之后的循环体语句,直到条件不满足则结束循环。

数据库中的while循环和c语言中的while循环一样。

例如:求数字1到100的和


-- while循环
delimiter //
create procedure test(in s int,out s2 int)
begin 
declare i int default 1;
declare su int default 0;
while i<=s
do 
set su=su+i;
set i=i+1;
end while;
set s2=su;
end //
delimiter ;
call test(100,@n);
select @n;



2ea86f7f5ea22531c7784dc5de157ae9_890c184ee1cd491cb2aea2f14726e804.png



2.loop循环

loop循环的结构

①.loop循环基本格式:

loop 循环语句; end loop;

注意:这里的loop循环时一个无限循环(死循环),其没有结束符,所以需要手动添加结束条件;

②.给loop循环手动添加结束条件

循环别名:loop 循环条件; if 条件表达式 then leave 循环别名; end if; end loop;

首先执行loop之后的循环体语句,循环体语句中的if条件满足则leave离开循环,否则继续循环;

代码演示:


-- loop循环;
 -- 求1到n中的质数;
delimiter //
create procedure section(in n int)
begin 
declare i int default 1;
S:loop
set i=i+1;
if i%2=0 then iterate S;  -- iterate和c语言中的continue相似;
else select i;
end if;
if i>n then leave S;
end if;
end loop;
end //
delimiter ;
call section(100);



3.repeat循环


repeat循环的基本格式:

repeat 循环体语句; until 条件表达式; end repeat;

首先执行repeat之后的循环体语句,然后判断until之后的条件,如果条件不满足则继续循环,否则条件满足则结束循环。

#注意:repeat循环相当于c语言中的do···while循环语句,都是先执行一次循环体然后再进行条件判断,但是不同的是,do while循环是条件不满足时跳出循环,repeat循环是条件满足时才结束循环,并且until后不能有;号。


例如:求整数n到m的和;


-- repeat循环;
  -- 求n到m的和;
  delimiter //
  create procedure sumall(in n int,in m int,out a int)
  begin
  declare ss int default 0;
  declare i int default n;
  repeat
  set ss=ss+i;
  set i=i+1;
  set a=ss;
  until i>m
  end repeat;
  end//
  delimiter ;
  call sumall(10,80,@a);
  select @a;



82ffea5cd9ff46a4c5e503c5a15d1c4a_b68e4983760c407e8938126f5b19187e.png



4.跳出语句


①.leave

leave的基本格式:

leave 别名;

离开别名所代表的结构,别名可以代表语句块或循环;

相当于c语言中的break语句,用于跳出整个循环,结束整个循环;

②.iterate

iterate的基本格式:

iterate 别名;

相当于c语言中的continue语句,用于跳出本次循环,执行下一次的循环。


总结


本节我们学习了MySQL数据库中的流程控制,MySQL数据库的讲解基本就到这里了,下一节是关于如何将数据库和VS连接的教程。本节的代码会附在后面,大家可以去尝试理解.


代码浮现
use db_2; -- 使用数据库;
#局部变量的使用
    -- 在存储过程中使用局部变量完成某些操作;
delimiter //
create procedure sum3(in x int,in y int)
begin
declare z int default 0;  -- 定义一个局部变量并初始化为0;
set z=x+y;  -- 给z赋值;
select z as "两数的和";
end//
delimiter ;
call sum3(123,345);
-- 使用用户变量;
delimiter //
create procedure sum4(in x int,in y int,out z int)
begin 
set z=x+y;
end//
delimiter ;
set @a=10;
set @b=390;
call sum4(@a,@b,@c);
select @c as"两数之和"; -- 用用户变量来接收存储过程返回的值;
-- 会话变量的查看;
show session variables;
select @@admin_port;  -- 从数据库系统中选择的会话变量;
#分支结构的使用
delimiter //
create procedure get_grade1(in score float,out grade  varchar(20))
begin
declare s int default 0;
set s=score div 10; -- 整除;
if s=9 then set grade="优秀";
elseif s=8 then set grade="优";
elseif s=7 then set grade='良';
else if s=6 then set grade='及';
else set grade='不及格';
end if;
end //
delimiter ;
call get_grade1(78,@ss);
select @ss;
/*Error Code: 1064. You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'then set grade="不及格"; end if; end' at line 9
*/
delimiter //
create procedure sention(in score int)
begin 
declare s int default 0;
set s=score div 10;
case s
when 10 then select '满分' as 成绩等级;
when 9 then select '优秀' as 成绩等级;
when 8 then select '良好' 成绩等级;
when 7 then select '及格' 成绩等级;
when 6 then select '及格' 成绩等级;
else select '不及格' 成绩等级;
end case;
end //
delimiter ;
call sention(99);
#循环结构
-- while循环
delimiter //
create procedure test(in s int,out s2 int)
begin 
declare i int default 1;
declare su int default 0;
while i<=s
do 
set su=su+i;
set i=i+1;
end while;
set s2=su;
end //
delimiter ;
call test(100,@n);
select @n;
-- loop循环;
 -- 求1到n中的质数;
delimiter //
create procedure section(in n int)
begin 
declare i int default 1;
S:loop
set i=i+1;
if i%2=0 then iterate S;  -- iterate和c语言中的continue相似;
else select i;
end if;
if i>n then leave S;
end if;
end loop;
end //
delimiter ;
call section(100);
-- repeat循环;
  -- 求n到m的和;
  delimiter //
  create procedure sumall(in n int,in m int,out a int)
  begin
  declare ss int default 0;
  declare i int default n;
  repeat
  set ss=ss+i;
  set i=i+1;
  set a=ss;
  until i>m
  end repeat;
  end//
  delimiter ;
  call sumall(10,80,@a);
  select @a;
相关实践学习
如何在云端创建MySQL数据库
开始实验后,系统会自动创建一台自建MySQL的 源数据库 ECS 实例和一台 目标数据库 RDS。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助 &nbsp; &nbsp; 相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
6月前
|
存储 关系型数据库 MySQL
轻松入门MySQL:优化复杂查询,使用临时表简化数据库查询流程(13)
轻松入门MySQL:优化复杂查询,使用临时表简化数据库查询流程(13)
199 0
|
16天前
|
存储 SQL NoSQL
|
2月前
|
SQL 缓存 关系型数据库
揭秘MySQL一条SQL语句的执行流程
以上步骤共同构成了MySQL处理SQL语句的完整流程,理解这一流程有助于更有效地使用MySQL数据库,优化查询性能,及时解决可能出现的性能瓶颈问题。
90 7
|
2月前
|
SQL 关系型数据库 MySQL
Python操作pymysql数据库的流程与技巧
在现代软件开发中,Python作为一门高效且易于学习的编程语言,广泛应用于各种场景,其中包括数据库操作。**PyMySQL** 是一个流行的Python数据库接口,用于连接和操作MySQL数据库。它提供了一种简便的方法来执行SQL语句、处理数据和管理数据库事务。以下是使用PyMySQL操作MySQL数据库的流程与技巧,旨在为开发者提供一个清晰、实用的指南。
54 0
|
4月前
|
NoSQL Java Redis
软件开发常见流程之宝塔初始化安装环境配置,Lam前面不选,直接跳商城,在宝塔内点击软件商城,安Mysql5.7,安java项目管理器,安Ngnix最新版,安Redis
软件开发常见流程之宝塔初始化安装环境配置,Lam前面不选,直接跳商城,在宝塔内点击软件商城,安Mysql5.7,安java项目管理器,安Ngnix最新版,安Redis
|
4月前
|
前端开发 NoSQL 数据库
部署常用的流程,可以用后端,连接宝塔,将IP地址修改好,本地只要连接好了,在本地上前后端跑起来,前端能够跑起来,改好了config.js资料,后端修改好数据库和连接redis,本地上跑成功了,再改
部署常用的流程,可以用后端,连接宝塔,将IP地址修改好,本地只要连接好了,在本地上前后端跑起来,前端能够跑起来,改好了config.js资料,后端修改好数据库和连接redis,本地上跑成功了,再改
|
5月前
|
关系型数据库 MySQL 数据库
MySQL数据库——函数-字符串函数、数值函数、日期函数、流程函数
MySQL数据库——函数-字符串函数、数值函数、日期函数、流程函数
47 2
|
4月前
|
前端开发 JavaScript NoSQL
软件开发常见流程之若依项目修改,前后端本地启动,本地必须有Redis+Navicate启动数据库
软件开发常见流程之若依项目修改,前后端本地启动,本地必须有Redis+Navicate启动数据库
|
6月前
|
关系型数据库 MySQL Linux
【MySQL-10】数据库函数-案例演示【字符串/数值/日期/流程控制函数】(代码演示&可cv代码)
【MySQL-10】数据库函数-案例演示【字符串/数值/日期/流程控制函数】(代码演示&可cv代码)
【MySQL-10】数据库函数-案例演示【字符串/数值/日期/流程控制函数】(代码演示&可cv代码)
|
5月前
|
存储 数据库连接 数据库
逆向学习数据库篇:表设计和数据库操作的核心概念与流程
逆向学习数据库篇:表设计和数据库操作的核心概念与流程
35 0