平时绝大部分时间可能都用不到mysql的流程控制语句,但如果我们需要写存储过程的话,就会用到了。有了流程控制语句,mysql就能想其他编程语言一样写程序了。下面分别来介绍条件分支与循环体。
条件分支
mysql关于条件分支有两种,if与case。
if条件
首先来看它的语法:
if condition then 语句;[elseif condition then 语句]……[else 语句]end if;
和php看起来有点像,但是在mysql里是没有“{}”,所以在mysql里使用end if来结束条件分支。
下来我们来写一个最简单的条件分支,判断输入的值是否大于60,为真则输出pass。
begin if score >= 60 then select 'pass'; end if;end
现在,我们来写一个多分支结构。当得分大于等于90时候,输出perfetct,大于等于80输出great;大于等于70则输出good;大于等于60输出common;否则输出bad;
begin if score >= 90 then select 'perfect'; elseif score >= 80 then select 'great'; elseif score >=70 then select 'good'; elseif score >= 60 then select 'common'; else select 'bad'; end if;end
case条件分支
case条件分支有两种语法。第一种和php中的if类似,另一种则和php中的switch-case类型。
语法1:case when v1 then 语句 [when v2 then 语句] …… [else 语句]end case;
语法2:case value when v1 then 语句 [when v2 then 语句] …… [else 语句]end case;
下面来用语法2来完成和if一样的功能。
begin case floor(score/10) when 10 then select '优秀'; when 9 then select '优秀'; when 8 then select '良好'; when 7 then select '一般'; when 6 then select '及格'; else select '不及格'; end case; end
循环体
mysql中也有几种不同的循环体结构,并且也有类似php中的break及continue的语句。下面,我们来看看这些循环体以及他们有什么样的区别。
while
这里的while基本和php一样。他的语法如下:
while condition do 循环体end while;
下面,我们来写一个最简单的循环体,计算1+2+……+100的总和。
begin declare i tinyint default 1; declare n tinyint default 100; declare s int default 0; while i <= n do set s = s + i; set i = i + 1; end while; select s;end
这里declare相当于定义一个变量,然后用default设置初始值。而变量的赋值,则需要set命令实现。
repeat
repeat相当于php中的do-while循环体,先执行循环体,然后再进行条件判断。它的语法如下:
repeat 循环体until conditionend repeat;
下面,我们用repeat完成1+2+……+100的总和。
begin declare i tinyint default 1; declare n tinyint default 100; declare s int default 0; repeat set s = s+i; set i = i+1; until i > 100 end repeat; select s;end
loop循环
loop可以反复执行一个代码块,并可以给loop设置标签。
leave相当于php中的break语句,loop如果想退出循环,就必须使用leave来实现。另外,可用iterate来实现php中的continue语句的功能。
下面,来看看两个实例。
第一个还是计算100以所有自然数的和,但这里有个注意点,因为loop没有condition语句,所以leave必须要和if配合使用来完成跳出循环的功能。
begin declare i tinyint default 1; declare n tinyint default 100; declare s int default 0; l:loop set s = s + i; set i = i + 1; if i > n then leave l; end if; end loop l; select s;end
第二个例子,我们会用到iterate。计算100以内所有奇数的和。
begin declare i tinyint default 0; declare n tinyint default 100; declare s int default 0; l:loop if i >= n then leave l; end if; set i = i + 1; if i % 2 = 0 then iterate l; end if; set s = s + i; end loop l; select s;end
以上就是mysql流程控制之条件、循环结构的详细内容。