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 语句 精选示例总结参考资料 概念 循环结构是编程中常见的控制结构,它允许我们重复执行一段代码,直到满足特定条件为止。 在 Mysql 中,常用来实现各种复杂…...
【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按钮悬浮,鼠标悬浮在按钮上的状态,按钮颜色 */QPushButto…...
MySQL数据库高级SQL语句及存储过程
目录 一、高级SQL语句 (一)case语句 1.语法定义 2.示例 (二)空值(NULL) 和 无值( ) 1.区别 2.示例 (1)字符长度 (2)判断方法 ① 空值(NULL) ② 无值( ) (3…...
使用idea构建父子类springboot项目教程
第一步创建一个父类java项目(最外层java项目) 1.点击File 然后点击new 再点击Project 2.点击Maven 配置Java版本 再点击next 3.GroupId:包结构,ArtifactId:项目名称,填写完,点击next 4.点击…...
TCP_可靠数据传输原理
引言 在网络通信中,TCP是确保数据可靠传输的关键协议。但在我们深入研究TCP拥塞控制技术之前,让我们先探索可靠数据传输的原理,特别是TCP头部中一些重要字段的作用。 网络层提供了点对点的通信服务,努力交付数据报,但…...
Python随机点名
python随机点名 # 生成 0 ~ 9 之间的随机数 # 导入 random(随机数) 模块 import random print(random.randint(0,9)) 执行以上代码输出结果为: 4 尝试一下 以上实例我们使用了 random 模块的 randint() 函数来生成随机数,你每次执行后都返回不同的数字&a…...
HarmonyOS4.0系统性深入开发07创建一个ArkTS卡片
创建一个ArkTS卡片 在已有的应用工程中,创建ArkTS卡片,具体操作方式如下。 创建卡片。 根据实际业务场景,选择一个卡片模板。 在选择卡片的开发语言类型(Language)时,选择ArkTS选项,然后单…...
胡润研究院发布《2023胡润中国最具历史文化底蕴品牌榜》
胡润研究院发布《2023胡润中国最具历史文化底蕴品牌榜》,前十名分别是片仔癀、同仁堂、贵州茅台、五粮液、中国银行、中华、黄山、农业银行、建设银行、汾酒。 榜单调研范围涵盖中国内地具有60年以上历史的为消费者提供产品或服务的品牌,综合考察品牌历史…...
MFC编程技巧与范例详解01
目录 1、MFC概述 (1)、MFC为什么不用C语言使用C (2)、MFC的开发模型文档-视图模型 (3)、一个完善的MFC程序应该包括 (4)、MFC常用的类 2、MFC的特性 (1)…...
TPS5430正负电源模块
TPS5430正负电源模块 Chapter1 TPS5430正负电源模块一、芯片重要参数二、tps5430参考电路讲解以及PCB布局1.正压降压(15V转12V)2.正压降负压(15V转-12V) Chapter2 使用tps5430制作正负DC-DC降压电源,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 库,它提供了一个高级 API 来通过 DevTools 协议控制 Chromium 或 Chrome。 二、使用 1、安装nodejs最新版 2、安装puppeteer-core npm install puppeteer-core 3、编写main.js const puppeteer require(puppeteer-core);(as…...
vue3按钮点击频率控制
现有一个按钮,如下图 点击时 再次点击 刷新窗口再次点击 刷新窗口依然可以实现点击频率控制。 代码实现: <template><!--<el-config-provider :locale"locale"><router-view/></el-config-provider>--><el…...
(一)Matlab数值计算基础
目录 1.2Matlab中的数据类型 1.2Matlab中的数据类型 逻辑型 逻辑型变量值为1或0字符型 MATLAB的字符型输入使用单引号括起来,字符串存储为字符数组,每个元素占一个ASCII字符数值型 数值型分为整型(int)、单精度浮点型࿰…...
《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(思维) 题意: 有一个序列 A a 1 , a 2 , . . . , a n k A a_1, a_2, ..., a_{n k} Aa1,a2,...,ank,且这个序列满足 ∏ i 1 n k a i 2023 \prod\limits_{i 1}^{n k}a_i 2023 i1∏nkai2023,而这个序列中的 k k k个…...
【蓝桥杯】比赛大纲整理
枚举[1-3] 排序 (1)冒泡排序[2] (2)选择排序[3] (3)插入排序[3] 搜索(bfs, dfs)[1-5] 贪心[1-5] 模拟[1-3] 二分[2-5] DP(普通一维问题)[3-5] 高精度[1-5] 数据结构 (1)栈[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 接…...
Win11Debloat实战指南:3步彻底清理Windows 11系统臃肿
Win11Debloat实战指南:3步彻底清理Windows 11系统臃肿 【免费下载链接】Win11Debloat 一个简单的PowerShell脚本,用于从Windows中移除预装的无用软件,禁用遥测,从Windows搜索中移除Bing,以及执行各种其他更改以简化和改…...
RK3588开发板TF卡槽改造:实现SDIO WIFI模组O9201SB的灵活接入
1. RK3588开发板TF卡槽改造背景与价值 最近在折腾RK3588开发板时,发现一个很有意思的玩法:把原本只能插TF卡的卡槽改造成支持SDIO WIFI模组的接口。这个改造特别适合那些需要灵活接入不同WIFI模组的开发者,比如我在做智能家居网关开发时&…...
从‘偏差-方差’到一行代码:用NumPy/PyTorch五步实现GAE,附PPO实战避坑点
从‘偏差-方差’到一行代码:用NumPy/PyTorch五步实现GAE,附PPO实战避坑点 强化学习中的策略优化常常面临一个核心挑战:如何准确评估动作的价值?广义优势估计(GAE)通过巧妙平衡偏差与方差,成为PP…...
Mojo+Python混合部署案例深度拆解(从Jupyter到生产环境的无缝迁移全路径)
第一章:MojoPython混合部署案例深度拆解(从Jupyter到生产环境的无缝迁移全路径)Mojo 作为新兴的系统级编程语言,与 Python 生态天然兼容,为机器学习模型从探索性开发(Jupyter Notebook)迈向高吞…...
老旧Mac如何重获新生?OCLP-Mod带来的系统升级解决方案
老旧Mac如何重获新生?OCLP-Mod带来的系统升级解决方案 【免费下载链接】OCLP-Mod A mod version for OCLP,with more interesting features. 项目地址: https://gitcode.com/gh_mirrors/oc/OCLP-Mod 随着科技的快速迭代,许多曾经性能卓越的Mac设备…...
软件测试学习第一期
🎬 博客主页:博主链接 🎥 本文由 M malloc 原创,首发于 CSDN🙉 🎄 学习专栏推荐:LeetCode刷题集! 🏅 欢迎点赞 👍 收藏 ⭐留言 📝 如有错误敬请指…...
Vue3项目救星:我是如何用Cursor的‘项目规则’功能,让团队新人一天上手的
Vue3团队协作革命:用Cursor项目规则实现代码规范的自动化治理 当新成员加入你的Vue3项目时,是否经历过这样的场景?新人提交的代码里混杂着选项式API和组合式API,路由命名忽而短横线忽而大驼峰,样式文件里散落着各种魔…...
从零搭建SRS流媒体服务器:实现RTMP推拉流的实战部署指南
1. 为什么选择SRS搭建流媒体服务器? 最近几年直播和实时视频的需求爆发式增长,很多开发者都在寻找轻量高效的流媒体服务器方案。我测试过不少开源方案,最终发现SRS(Simple Realtime Server)是最适合个人和小团队自建的…...
2026 AI大模型岗位薪资全曝光:从30k到80w,程序员必备指南,非常详细收藏我这一篇就够了
文章主要展示了2026年AI领域热门岗位的薪资情况,包括华为、腾讯、联影等公司在多个城市的AI工程师、大模型算法等职位的薪资水平。数据显示AI人才市场需求旺盛,薪资从月薪3.6万到年包80万不等。文章提供了AI薪资专场的链接,邀请读者了解更多行…...
告别手打公式!用SimpleTex截图转LaTeX+Axmath微调+Typora排版的保姆级教程
数学公式高效处理全流程:从截图识别到专业排版 每次在论文或笔记中插入复杂的数学公式时,你是否也经历过这样的痛苦?反复核对LaTeX代码中的每个括号,调整上下标位置,或是为了一个特殊符号翻遍文档。传统的手动输入方式…...
