当前位置: 首页 > news >正文

19. Mysql 循环语句

文章目录

    • 概念
    • 循环语句
      • while 循环语句
      • repeat 循环语句
      • loop 循环语句
      • iterate 和 leave 语句
    • 精选示例
    • 总结
    • 参考资料

概念

循环结构是编程中常见的控制结构,它允许我们重复执行一段代码,直到满足特定条件为止。

在 Mysql 中,常用来实现各种复杂的逻辑操作和对满足条件的数据进行批量操作,提高数据处理的效率和灵活性,例如批量处理数据、生成序列号和数据动态透视等。

循环语句

while 循环语句

while 循环语句是 MySQL 中最基本的循环语句,它创建一个带条件判断的循环过程。while 在执行语句执行时,先对指定的表达式进行判断,如果为真,就执行循环内的语句,否则退出循环。

[while_label:] while 循环条件  do循环体end while [while_label];

while_label 为语句的标注名称,可以省略;循环体里面一般会写终止条件,否则无限死循环。

示例

drop procedure if exists update_salary_while;
create procedure update_salary_while(out num int)
begin# 声明变量和赋值declare avg_sal double ; -- 记录平均工资declare while_count int default 0; -- 记录循环次数select avg(salary) into avg_sal from employees; -- 赋值while avg_sal > 5000 doupdate employees set salary = salary * 0.9 ;set while_count = while_count + 1;select avg(salary) into avg_sal from employees;end while;set num = while_count;-- 给num赋值
end;call update_salary_while(@num); -- 调用
select @num;
select avg(salary) from employees;

repeat 循环语句

repeat 循环首先会执行一次循环,然后在 until 中进行表达式的判断,如果满足条件就退出,即 end repeat ;如果条件不满足,则会就继续执行循环,直到满足退出条件为止。

[repeat_label:] repeat循环体的语句until 结束循环的条件表达式end repeat [repeat_label];

repeat_label 为 repeat 语句的标注名称,该参数可以省略;repeat 语句内的语句或语句群被重复,直至 结束循环的条件表达式 为真。

示例

drop procedure if exists update_salary_repeat;
create procedure update_salary_repeat(out num int)
begin#声明变量declare avg_sal double ; -- 记录平均工资declare repeat_count int default 0; -- 记录循环次数select avg(salary) into avg_sal from employees;repeatupdate employees set salary = salary * 1.15;set repeat_count = repeat_count + 1;select avg(salary) into avg_sal from employees;until avg_sal >= 13000end repeat;set num = repeat_count;-- 给num赋值		
end;
call update_salary_repeat(@num);
select @num;
select avg(salary) from employees;

loop 循环语句

loop 循环语句用来重复执行某些语句。循环执行的语句一直重复执行直到循环被退出(使用 leave 子句),跳出循环过程。

[loop_label:] loop循环执行的语句end loop [loop_label];

loop_label 为 loop 的标注名称,可以省略;常常和 iterate 、 leave 语句配合使用。

示例

drop procedure if exists update_salary_repeat;
create procedure update_salary_loop(out num int)
begin#声明变量declare avg_sal double ; #记录员工的平均工资declare loop_count int default 0;#记录循环的次数select avg(salary) into avg_sal from employees;-- 初始化条件,获取员工的平均工资loop_lab:loop# 结束循环的条件if avg_sal >= 12000then leave loop_lab;end if;# 循环体:如果低于12000,更新员工的工资update employees set salary = salary * 1.1;# 迭代条件select avg(salary) into avg_sal from employees;-- 更新avg_sal变量的值set loop_count = loop_count + 1;-- 记录循环次数end loop loop_lab;set num = loop_count;-- 给num赋值
end;
call update_salary_loop(@num);
select @num;

iterate 和 leave 语句

iterate 语句表示重新开始循环,将执行顺序转到语句段开头处,可以理解为 Python 中的 continue 。

leave 语句表示跳出循环或者跳出程序体的操作,类似于 Python 中的 break 。

示例

drop procedure iterate_leave_test;
create procedure iterate_leave_test()
begindeclare num int default 0;loop_label:loop#赋值set num = num + 1;if num  < 10then iterate loop_label;-- 满足则跳出循环,重新开始循环elseif num > 15then leave loop_label;-- 满足则跳出并结束循环end if;insert into sql_test1.test(id, name, sale) values (num,'test',1);end loop;
end;
call iterate_leave_test(); -- 调用

精选示例

随机生成批量指定长度的密码。

drop procedure if exists generate_pwd;
create procedure generate_pwd(in len int, in cnt int)
begindeclare chars_str varchar(100) default 'abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyz0123456789';declare return_str varchar(255) default '';truncate table sql_test1.pwd;set @j = 1;while @j <= cnt doset @i = 1;set @return_str = '';while @i <= len doset @return_str = concat(@return_str, substring(chars_str, floor(1 + rand() * 62), 1));set @i = @i + 1;end while;insert into sql_test1.pwd(id, pwd) values (@j, @return_str);set @j = @j + 1;end while;select * from sql_test1.pwd;
end;
call generate_pwd(30,10);
+------+--------------------------------+
| id   | pwd                            |
+------+--------------------------------+
|    1 | u5obsl9zdejker8zoppsfovz1xastz |
|    2 | hwcns3u97zqyr9ho0s85u8orelh3ze |
|    3 | 7uuxsmziu6rsbgmopwy9hr1ng5gtta |
|    4 | lnmnmvjto43vgnwrbszjjverot1vl3 |
|    5 | 2s7nslhysgxkyr8dviwllemnurhjrr |
|    6 | nfif1xzoaexojyjbflbo3habkipknr |
|    7 | xhoyvrzlteieculu9pzazf9osi2s5d |
|    8 | mrmajvvbkfeyzuqcab0jpwke6pawju |
|    9 | b2t4ncwab3ysqcc7zknox6h2vlnnqb |
|   10 | bzzow8gr4dmpgiqlri8l9yb5ibz8pb |
+------+--------------------------------+

使用了 while 嵌套,定义了两个输入参数,分别是秘密长度和生成的数量,我们只要确定这两个参数就可以得到想要的批量密码。随机生成批量密码有多种方法,如果想了解更多,可以查看 Mysql 生成批量随机密码 和 Mysql 自定义函数

总结

通过本文,我们了解了MySQL中的循环语句及其用法。使用循环或者嵌套循环能帮助我们处理各种复杂的数据操作和逻辑处理,当遇到需要重复执行的 sql 语句都可以写成循环,让程序自动跑,防止手动修改参数意外出错。

参考资料

  • MySQL官方文档
  • MySQL Tutorial Loop
  • Mysql 生成批量随机密码
  • Mysql 自定义函数
  • Mysql 存储过程

相关文章:

19. Mysql 循环语句

文章目录 概念循环语句while 循环语句repeat 循环语句loop 循环语句iterate 和 leave 语句 精选示例总结参考资料 概念 循环结构是编程中常见的控制结构&#xff0c;它允许我们重复执行一段代码&#xff0c;直到满足特定条件为止。 在 Mysql 中&#xff0c;常用来实现各种复杂…...

【qt】解决qt里编辑qss后失效问题(qt编码问题)

1、先创建qss文本stylesheet.qss 以按钮为例 QPushButton {background-color:rgb(240,255,255);color: rgb(0, 0, 2);border-style: outset;border-color: beige;border-radius: 10px; }/* hover按钮悬浮&#xff0c;鼠标悬浮在按钮上的状态&#xff0c;按钮颜色 */QPushButto…...

MySQL数据库高级SQL语句及存储过程

目录 一、高级SQL语句 &#xff08;一&#xff09;case语句 1.语法定义 2.示例 &#xff08;二&#xff09;空值(NULL) 和 无值( ) 1.区别 2.示例 &#xff08;1&#xff09;字符长度 &#xff08;2&#xff09;判断方法 ① 空值(NULL) ② 无值( ) &#xff08;3…...

使用idea构建父子类springboot项目教程

第一步创建一个父类java项目&#xff08;最外层java项目&#xff09; 1.点击File 然后点击new 再点击Project 2.点击Maven 配置Java版本 再点击next 3.GroupId&#xff1a;包结构&#xff0c;ArtifactId&#xff1a;项目名称&#xff0c;填写完&#xff0c;点击next 4.点击…...

TCP_可靠数据传输原理

引言 在网络通信中&#xff0c;TCP是确保数据可靠传输的关键协议。但在我们深入研究TCP拥塞控制技术之前&#xff0c;让我们先探索可靠数据传输的原理&#xff0c;特别是TCP头部中一些重要字段的作用。 网络层提供了点对点的通信服务&#xff0c;努力交付数据报&#xff0c;但…...

Python随机点名

python随机点名 # 生成 0 ~ 9 之间的随机数 # 导入 random(随机数) 模块 import random print(random.randint(0,9)) 执行以上代码输出结果为: 4 尝试一下 以上实例我们使用了 random 模块的 randint() 函数来生成随机数&#xff0c;你每次执行后都返回不同的数字&a…...

HarmonyOS4.0系统性深入开发07创建一个ArkTS卡片

创建一个ArkTS卡片 在已有的应用工程中&#xff0c;创建ArkTS卡片&#xff0c;具体操作方式如下。 创建卡片。 根据实际业务场景&#xff0c;选择一个卡片模板。 在选择卡片的开发语言类型&#xff08;Language&#xff09;时&#xff0c;选择ArkTS选项&#xff0c;然后单…...

胡润研究院发布《2023胡润中国最具历史文化底蕴品牌榜》

胡润研究院发布《2023胡润中国最具历史文化底蕴品牌榜》&#xff0c;前十名分别是片仔癀、同仁堂、贵州茅台、五粮液、中国银行、中华、黄山、农业银行、建设银行、汾酒。 榜单调研范围涵盖中国内地具有60年以上历史的为消费者提供产品或服务的品牌&#xff0c;综合考察品牌历史…...

MFC编程技巧与范例详解01

目录 1、MFC概述 &#xff08;1&#xff09;、MFC为什么不用C语言使用C &#xff08;2&#xff09;、MFC的开发模型文档-视图模型 &#xff08;3&#xff09;、一个完善的MFC程序应该包括 &#xff08;4&#xff09;、MFC常用的类 2、MFC的特性 &#xff08;1&#xff09…...

TPS5430正负电源模块

TPS5430正负电源模块 Chapter1 TPS5430正负电源模块一、芯片重要参数二、tps5430参考电路讲解以及PCB布局1.正压降压&#xff08;15V转12V&#xff09;2.正压降负压&#xff08;15V转-12V&#xff09; Chapter2 使用tps5430制作正负DC-DC降压电源&#xff0c;tps7a47和tps7a33制…...

【LeetCode 面试经典150题】45. Jump Game II 跳跃游戏II

45. Jump Game II 题目大意 You are given a 0-indexed array of integers nums of length n. You are initially positioned at nums[0]. Each element nums[i] represents the maximum length of a forward jump from index i. In other words, if you are at nums[i], yo…...

RustDesk连接客户端提示key不匹配 Key Mismatch无法连接(已解决)

环境: RustDesk1.1.9 服务端docker部署 问题描述: RustDesk连接客户端提示key不匹配 Key Mismatch无法连接 解决方案: 1.docker部署RustDesk服务检查配置 networks:rustdesk-net:external: falsevolumes:hbbr:hbbs:services:hbbs:container_name: rustdesk-hbbsport…...

puppeteer入门指南

一、简介 Puppeteer 是一个 Node 库&#xff0c;它提供了一个高级 API 来通过 DevTools 协议控制 Chromium 或 Chrome。 二、使用 1、安装nodejs最新版 2、安装puppeteer-core npm install puppeteer-core 3、编写main.js const puppeteer require(puppeteer-core);(as…...

vue3按钮点击频率控制

现有一个按钮&#xff0c;如下图 点击时 再次点击 刷新窗口再次点击 刷新窗口依然可以实现点击频率控制。 代码实现&#xff1a; <template><!--<el-config-provider :locale"locale"><router-view/></el-config-provider>--><el…...

(一)Matlab数值计算基础

目录 1.2Matlab中的数据类型 1.2Matlab中的数据类型 逻辑型 逻辑型变量值为1或0字符型 MATLAB的字符型输入使用单引号括起来&#xff0c;字符串存储为字符数组&#xff0c;每个元素占一个ASCII字符数值型 数值型分为整型&#xff08;int&#xff09;、单精度浮点型&#xff0…...

《MySQL系列-InnoDB引擎02》InnoDB存储引擎介绍

文章目录 第二章 InnoDB存储引擎1 InnoDB存储引擎概述2 InnoDB存储引擎的版本3 InnoDB体系架构3.1 后台线程3.2 内存 4 Checkpoint技术5 Master Thread 工作方式5.1 InnoDB 1.0.x版本之前的Master Thread5.2 InnoDB 1.2.x版本之前的Master Thread5.3 InnoDB 1.2.x版本的Master …...

单片机大小端模式

单片机大小端模式 参考链接 单片机干货-什么是大小端_哔哩哔哩_bilibilihttps://www.bilibili.com/video/BV1Ju4y1M7Tx/?spm_id_from333.337.search-card.all.click&vd_sourcee821a225c7ba4a7b85e5aa6d013ac92e 特此记录 anlog 2024年1月2日...

Codeforces Good Bye 2023 A~E

A.2023(思维) 题意&#xff1a; 有一个序列 A a 1 , a 2 , . . . , a n k A a_1, a_2, ..., a_{n k} Aa1​,a2​,...,ank​&#xff0c;且这个序列满足 ∏ i 1 n k a i 2023 \prod\limits_{i 1}^{n k}a_i 2023 i1∏nk​ai​2023&#xff0c;而这个序列中的 k k k个…...

【蓝桥杯】比赛大纲整理

枚举[1-3] 排序 &#xff08;1&#xff09;冒泡排序[2] &#xff08;2&#xff09;选择排序[3] &#xff08;3&#xff09;插入排序[3] 搜索(bfs, dfs)[1-5] 贪心[1-5] 模拟[1-3] 二分[2-5] DP(普通一维问题)[3-5] 高精度[1-5] 数据结构 &#xff08;1&#xff09;栈[2-4]&…...

探索 CodeWave低代码技术的魅力与应用

目录 前言1 低代码平台2 CodeWave简介3 CodeWave 的独特之处3.1 高保真还原交互视觉需求3.2 擅长复杂应用开发3.3 支持应用导出&独立部署3.4 金融级安全要求3.5 可集成性高3.6 可拓展性强 4 平台架构和核心功能4.1 数据模型设计4.2 页面设计4.3 逻辑设计4.4 流程设计4.5 接…...

【Oracle APEX开发小技巧12】

有如下需求&#xff1a; 有一个问题反馈页面&#xff0c;要实现在apex页面展示能直观看到反馈时间超过7天未处理的数据&#xff0c;方便管理员及时处理反馈。 我的方法&#xff1a;直接将逻辑写在SQL中&#xff0c;这样可以直接在页面展示 完整代码&#xff1a; SELECTSF.FE…...

【网络安全产品大调研系列】2. 体验漏洞扫描

前言 2023 年漏洞扫描服务市场规模预计为 3.06&#xff08;十亿美元&#xff09;。漏洞扫描服务市场行业预计将从 2024 年的 3.48&#xff08;十亿美元&#xff09;增长到 2032 年的 9.54&#xff08;十亿美元&#xff09;。预测期内漏洞扫描服务市场 CAGR&#xff08;增长率&…...

[ICLR 2022]How Much Can CLIP Benefit Vision-and-Language Tasks?

论文网址&#xff1a;pdf 英文是纯手打的&#xff01;论文原文的summarizing and paraphrasing。可能会出现难以避免的拼写错误和语法错误&#xff0c;若有发现欢迎评论指正&#xff01;文章偏向于笔记&#xff0c;谨慎食用 目录 1. 心得 2. 论文逐段精读 2.1. Abstract 2…...

BCS 2025|百度副总裁陈洋:智能体在安全领域的应用实践

6月5日&#xff0c;2025全球数字经济大会数字安全主论坛暨北京网络安全大会在国家会议中心隆重开幕。百度副总裁陈洋受邀出席&#xff0c;并作《智能体在安全领域的应用实践》主题演讲&#xff0c;分享了在智能体在安全领域的突破性实践。他指出&#xff0c;百度通过将安全能力…...

Python ROS2【机器人中间件框架】 简介

销量过万TEEIS德国护膝夏天用薄款 优惠券冠生园 百花蜂蜜428g 挤压瓶纯蜂蜜巨奇严选 鞋子除臭剂360ml 多芬身体磨砂膏280g健70%-75%酒精消毒棉片湿巾1418cm 80片/袋3袋大包清洁食品用消毒 优惠券AIMORNY52朵红玫瑰永生香皂花同城配送非鲜花七夕情人节生日礼物送女友 热卖妙洁棉…...

【Go语言基础【12】】指针:声明、取地址、解引用

文章目录 零、概述&#xff1a;指针 vs. 引用&#xff08;类比其他语言&#xff09;一、指针基础概念二、指针声明与初始化三、指针操作符1. &&#xff1a;取地址&#xff08;拿到内存地址&#xff09;2. *&#xff1a;解引用&#xff08;拿到值&#xff09; 四、空指针&am…...

Vue ③-生命周期 || 脚手架

生命周期 思考&#xff1a;什么时候可以发送初始化渲染请求&#xff1f;&#xff08;越早越好&#xff09; 什么时候可以开始操作dom&#xff1f;&#xff08;至少dom得渲染出来&#xff09; Vue生命周期&#xff1a; 一个Vue实例从 创建 到 销毁 的整个过程。 生命周期四个…...

使用python进行图像处理—图像滤波(5)

图像滤波是图像处理中最基本和最重要的操作之一。它的目的是在空间域上修改图像的像素值&#xff0c;以达到平滑&#xff08;去噪&#xff09;、锐化、边缘检测等效果。滤波通常通过卷积操作实现。 5.1卷积(Convolution)原理 卷积是滤波的核心。它是一种数学运算&#xff0c;…...

今日行情明日机会——20250609

上证指数放量上涨&#xff0c;接近3400点&#xff0c;个股涨多跌少。 深证放量上涨&#xff0c;但有个小上影线&#xff0c;相对上证走势更弱。 2025年6月9日涨停股主要行业方向分析&#xff08;基于最新图片数据&#xff09; 1. 医药&#xff08;11家涨停&#xff09; 代表标…...

Web APIS Day01

1.声明变量const优先 那为什么一开始前面就不能用const呢&#xff0c;接下来看几个例子&#xff1a; 下面这张为什么可以用const呢&#xff1f;因为复杂数据的引用地址没变&#xff0c;数组还是数组&#xff0c;只是添加了个元素&#xff0c;本质没变&#xff0c;所以可以用con…...