1. 流程控制结构
| 顺序结构:程序从上往下依次执行 |
| 分支结构:程序从两条或多条路径中选择一条去执行 |
| 循环结构:程序在满足一定条件的基础上,重复执行一段代码 |
2. 分支结构
1. if函数
| 功能: |
| 实现简单的双分支 |
| 语法: |
| if(表达式1,表达式2,表达式3) |
| 执行顺序: |
| 如果表达式1成立,则if函数返回表达式2的值,否则返回表达式3的值 |
| 应用: |
| 任何地方 |
2.case结构

| 特点: |
| 1. 可以作为表达式,嵌套在其他语句中使用,可以放在任何地方,BEGIN END中或BEGIN END的外面 |
| 可以作为独立的语句去使用,只能放在BEGIN END中 |
| 2. 如果WHEN中的值满足或条件成立,则执行对应的THEN后面的语句,并且结束CASE |
| 如果都不满足,则执行ELSE中的语句或值 |
| 3. ELSE可以省略,如果ELSE省略了,并且所有WHEN条件都不满足,则返回NULL。 |
案例
| 题:根据传入的成绩,来显示等级,来显示等级,比如传入的成绩:90-100,显示A;80-90,显示B;60-80,显示C;否则显示D。 |
| delimiter $ |
| create procedure test_case(IN score int) |
| BEGIN |
| CASE |
| WHEN score >= 90 AND score <= 100 THEN select 'A'; |
| WHEN score >= 80 THEN select 'B'; |
| WHEN score >= 60 THEN select 'C'; |
| ELSE select 'D'; |
| END case; |
| END $ |
| |
| delimiter $ |
| CALL test_case(60) $ |
3. if结构
| 功能:实现多量分支 |
| |
| 语法: |
| if 条件1 then 语句1; |
| elseif 条件2 then 语句2; |
| ... |
| [else 语句n;] |
| end if; |
| |
| 应用场合: |
| 应用在begin end中 |
案例
| 题:根据传入的成绩,来显示等级,来显示等级,比如传入的成绩:90-100,返回A;80-90,返回B;60-80,返回C;否则返回D。 |
| delimiter $ |
| create FUNCTION test_if(score int) returns char(1) |
| BEGIN |
| if score >= 90 AND score <= 100 THEN return 'A'; |
| elseif score >= 80 THEN return 'B'; |
| elseif score >= 60 THEN return 'C'; |
| else RETURN 'D'; |
| end if; |
| END $ |
| |
| select test_if(80) $ |
3. 循环结构
| 分类: |
| while loop repeat |
| |
| 循环控制: |
| iterate 类似于continue,结束本次循环,进行下一次循环。 |
| leave 类似于break,跳出,结束当前所在的循环 |
1. while
| 语法: |
| [标签:]while 循环条件 do |
| 循环体; |
| end while [标签]; |
2. loop
| 语法: |
| [标签:]loop |
| 循环体; |
| end loop [标签]; |
| 可以用来简单的模拟死循环 |
3. repeat
| 语法: |
| [标签:]repeat |
| 循环体; |
| until 结束循环的条件 |
| end repeat [标签]; |
案例
| 1.批量插入,根据次数插入到admin表中多条记录 |
| delimiter $ |
| create procedure pro_while1(IN insertCount INT) |
| BEGIN |
| declare i int default 1; |
| while i <= insertCount do |
| insert into admin(username, password) |
| values(concat('rose',i), '666'); |
| set i = i + 1; |
| END while; |
| END $ |
| |
| delimiter $ |
| call pro_while1(100) $ |
| |
| 2.批量插入,根据次数插入到admin表中多条记录,如果次数>20则停止 |
| delimiter $ |
| create procedure pro_while2(IN insertCount INT) |
| BEGIN |
| declare i int default 1; |
| a:while i <= insertCount do |
| insert into admin(username, password) |
| values(concat('xiaohua',i), '0000'); |
| IF i >= 20 THEN LEAVE a; |
| END IF; |
| set i = i + 1; |
| END while a; |
| END $ |
| |
| delimiter $ |
| call pro_while2(33) $ |
| |
| 3.添加iterate语句 |
| 批量插入,根据次数插入到admin表中多条记录,如果次数>20则停止 |
| delimiter $ |
| create procedure pro_while(IN insertCount INT) |
| BEGIN |
| declare i int default 0; |
| a:while i <= insertCount do |
| set i = i + 1; |
| if mod(i, 2) != 0 THEN iterate a; |
| end if; |
| |
| insert into admin(username, password) |
| values(concat('xiaohua',i),'0000'); |
| END while a; |
| END $ |
| |
| delimiter $ |
| call pro_while(20) $ |
案例
| 1. 已知表stringcontent |
| 其中字段: |
| id 自增长 |
| content varchar(20) |
| 向该表插入指定个数的,随机的字符串 |
| |
| |
| create table stringcontent( |
| id int primary key auto_increment, |
| content varchar(20) |
| ); |
| |
| delimiter $ |
| create procedure test_randstr_insert2(IN insertCount INT) |
| BEGIN |
| declare i int default 1; # 定义循环变量,表示插入次数 |
| declare str varchar(26) default 'abcdefghijklmnopqrstuvwxyz'; |
| declare startIndex int default 1; # 起始索引 |
| declare len INT DEFAULT 1; # 代表截取的字符的长度 |
| while i <= insertCount DO |
| set len = FLOOR(RAND()*(20-startIndex+1)+1); |
| set startIndex = FLOOR(RAND()*20+1); |
| insert into stringcontent(content) |
| values(SUBSTR(str,startIndex,len)); |
| set i = i + 1; |
| END WHILE; |
| END $ |
| |
| delimiter $ |
| call test_randstr_insert2(20) $ |
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!