MySQL基础总结(八)
控制结构
文章目录
控制结构
分支结构
if函数
语法
if(<表达式>,<表达式正确返回的值>,<表达式错误返回的值>)
case
语法 1 用于实现等值判断
case <变量|表达式|字段>
when <要判断的值1> then <返回的值1或执行的语句1>;
when <要判断的值2> then <返回的值2或执行的语句2>;
when <要判断的值3> then <返回的值3或执行的语句3>;
...
when <要判断的值n> then <返回的值n或执行的语句n>;
else <如果都不满足返回的值或者执行的语句>
end case;
语法 2
case <变量|表达式|字段>
when <要判断的条件1> then <返回的值1或执行的语句1>;
when <要判断的条件2> then <返回的值2或执行的语句2>;
when <要判断的条件3> then <返回的值3或执行的语句3>;
...
when <要判断的条件n> then <返回的值n或执行的语句n>;
else <如果都不满足返回的值或者执行的语句>
end case;
注意
_1. case语句可以作为表达式嵌套在其他语句中使用,也可以放在任何地方(如begin end
中或外)
2. 也可以作为独立的语句去使用,但是只能放在begin end
中
3. else
可以省略,定时如果省略else
,when
中的语句又没有匹配成功,就返回null
举例 创建存储过程,根据传入的成绩来显示等级
delimiter $
create procedure level(in score int)
begin
case
when score<=100 and score>=90 then select 'A';
when score<90 and score>=80 then select 'B';
when score<80 and score>70 then select 'C';
when score<70 and score>=60 then select 'D';
else select 'E';
end case;
end $
测试
call level(55)$
call level(75)$
if结构(注意不是if函数)
语法
if <条件1> then <语句1>;
elseif <条件2> then <语句2>;
elseif <条件3> then <条件3>;
...
elseif <条件n> then <条件n>;
else <语句>;
end if;
注意
1. else
可以省略
2. if结构只能应用在begin end
中
举例 根据传入的成绩来显示等级
delimiter $
create function level(score int) returns char(1)
begin
if score<=100 and score >=90 then select 'A';
elseif score<=100 and score >=90 then return 'B';
elseif score<=100 and score >=90 then return 'C';
elseif score<=100 and score >=90 then return 'D';
else return 'E';
end if;
end $
测试
select level(80)$
select level(30)$
循环结构
注意
所有的循环结构都可以添加一个标签,也可以不加,但是如果使用了跳出语句,必须加一个标签
while
先判断,再执行
语法
[标签:]while <循环条件> do
<循环体>;
end while [标签];
举例 1 批量插入
delimiter $
create procedure while_insert(in insertCount int)
begin
declare i int default 1;
while i<=insertCount do
insert into user(username,password) values(concat('user',i),'123456');
set i=i+i;
end while;
end $
测试
call while_insert(100)$
loop
没有结束条件,一直循环下去,只能通过跳出语句结束循环,可以用来模拟死循环
语法
[标签:] loop
<循环体>;
end loop [标签];
repeat
先执行一次,然后再判断条件,类似于 do…while…
语法
[标签:] repeat
<循环体>;
until <结束循环的条件>
end repeat [标签];
iterate (类似于continue)
举例 批量插入,只插入偶数次
delimiter $
create procedure leave_test(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;
insert into user(username,password) values(concat('user',i),'123456');
end if;
end while a;
end $
测试
call leave_test(100)$
leave (类似于break)
举例 批量插入数据,如果次数>20就停止
delimiter $
create procedure leave_test(in insertCount int)
begin
declare i int default 1;
a: while i<=insertCount do
insert into user(username,password) values(concat('user',i),'123456');
if i>=20 then leave a;
end if;
set i=i+1;
end while a;
end $
测试
call leave_test(100)$
efault 1;
a: while i<=insertCount do
insert into user(username,password) values(concat(‘user’,i),‘123456’);
if i>=20 then leave a;
end if;
set i=i+1;
end while a;
end $
测试
```mysql
call leave_test(100)$
PS MySQL的基础部分到这里算是更完了,接下来要开始更MySQL的高级部分了,新人博主,希望大家多多支持,有问题可以在评论区提出来或者私信给我,谢谢大家啦!
来源:CSDN
作者:Alaskyed
链接:https://blog.csdn.net/Alaskyed/article/details/103588661