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

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,高可用系列 2核4GB
RDS MySQL Serverless 高可用系列,价值2615元额度,1个月
简介: 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;
相关实践学习
每个IT人都想学的“Web应用上云经典架构”实战
本实验从Web应用上云这个最基本的、最普遍的需求出发,帮助IT从业者们通过“阿里云Web应用上云解决方案”,了解一个企业级Web应用上云的常见架构,了解如何构建一个高可用、可扩展的企业级应用架构。
MySQL数据库入门学习
本课程通过最流行的开源数据库MySQL带你了解数据库的世界。 &nbsp; 相关的阿里云产品:云数据库RDS MySQL 版 阿里云关系型数据库RDS(Relational Database Service)是一种稳定可靠、可弹性伸缩的在线数据库服务,提供容灾、备份、恢复、迁移等方面的全套解决方案,彻底解决数据库运维的烦恼。 了解产品详情:&nbsp;https://www.aliyun.com/product/rds/mysql&nbsp;
相关文章
|
存储 关系型数据库 MySQL
轻松入门MySQL:优化复杂查询,使用临时表简化数据库查询流程(13)
轻松入门MySQL:优化复杂查询,使用临时表简化数据库查询流程(13)
414 0
|
6月前
|
存储 XML JSON
Activiti 7 核心数据库表概览及流程生命周期中的作用
Activiti 7 工作流引擎通过约25张核心数据库表实现流程定义、运行时状态、历史记录与身份数据的存储。表名以ACT_开头,后跟标识用途的字母组合(如RE表示Repository静态信息,RU表示Runtime动态数据)。流程启动时在运行时表登记数据,任务执行中更新关联信息,结束时清理运行时记录并完善历史记录。各表分工明确且逻辑紧密关联,确保高效运行与完整留痕的平衡。掌握这些表的作用和关联有助于深入理解Activiti底层原理及进行高级应用开发。
444 0
|
10月前
|
SQL 存储 缓存
MySQL执行流程
本文介绍了MySQL的执行流程,分为server层和引擎层。server层包含连接器、查询缓存、解析器、预处理器、优化器等组件,负责SQL的接收、解析、优化及执行;引擎层负责数据的存储与读取。文章详细解释了各组件的功能,如连接器负责用户身份认证,查询缓存提高查询效率,解析器进行SQL的词法和语法分析,预处理器验证表和字段的存在性,优化器选择最优执行计划,最终由查询执行引擎完成查询并将结果返回给客户端。
219 0
MySQL执行流程
|
7月前
|
SQL 算法 搜索推荐
mysql 之order by工作流程
本文深入解析了MySQL中`ORDER BY`的排序机制,通过具体示例展示了排序过程及性能优化方法。文章首先分析了基于内存和磁盘的排序方式,包括`sort_buffer_size`的影响以及临时文件的使用场景。接着介绍了`rowid`排序算法,该算法通过减少参与排序的数据量来提升性能,并对比了其与传统排序的区别。此外,还探讨了随机查询`ORDER BY RAND()`的执行流程及其优化策略。最后提到了MySQL 5.6引入的优先队列排序算法,适用于仅需部分有序结果的场景。文章结合`optimizer_trace`工具详细说明了各配置参数对排序行为的影响,为优化查询提供了实用指导。
108 1
mysql 之order by工作流程
|
11月前
|
存储 SQL NoSQL
|
SQL 缓存 关系型数据库
揭秘MySQL一条SQL语句的执行流程
以上步骤共同构成了MySQL处理SQL语句的完整流程,理解这一流程有助于更有效地使用MySQL数据库,优化查询性能,及时解决可能出现的性能瓶颈问题。
299 7
|
SQL 关系型数据库 MySQL
Python操作pymysql数据库的流程与技巧
在现代软件开发中,Python作为一门高效且易于学习的编程语言,广泛应用于各种场景,其中包括数据库操作。**PyMySQL** 是一个流行的Python数据库接口,用于连接和操作MySQL数据库。它提供了一种简便的方法来执行SQL语句、处理数据和管理数据库事务。以下是使用PyMySQL操作MySQL数据库的流程与技巧,旨在为开发者提供一个清晰、实用的指南。
172 0
|
NoSQL Java Redis
软件开发常见流程之宝塔初始化安装环境配置,Lam前面不选,直接跳商城,在宝塔内点击软件商城,安Mysql5.7,安java项目管理器,安Ngnix最新版,安Redis
软件开发常见流程之宝塔初始化安装环境配置,Lam前面不选,直接跳商城,在宝塔内点击软件商城,安Mysql5.7,安java项目管理器,安Ngnix最新版,安Redis
|
前端开发 NoSQL 数据库
部署常用的流程,可以用后端,连接宝塔,将IP地址修改好,本地只要连接好了,在本地上前后端跑起来,前端能够跑起来,改好了config.js资料,后端修改好数据库和连接redis,本地上跑成功了,再改
部署常用的流程,可以用后端,连接宝塔,将IP地址修改好,本地只要连接好了,在本地上前后端跑起来,前端能够跑起来,改好了config.js资料,后端修改好数据库和连接redis,本地上跑成功了,再改
|
关系型数据库 MySQL Linux
【MySQL-10】数据库函数-案例演示【字符串/数值/日期/流程控制函数】(代码演示&可cv代码)
【MySQL-10】数据库函数-案例演示【字符串/数值/日期/流程控制函数】(代码演示&可cv代码)
【MySQL-10】数据库函数-案例演示【字符串/数值/日期/流程控制函数】(代码演示&可cv代码)

热门文章

最新文章

推荐镜像

更多