参考:<
流程控制语句用于根据条件控制语句的执行。MySQL中流程控制语句有:IF、CASE、LOOP、LEAVE、ITERATE、REPEAT、WHILE。
每个流程中可能包含一个单独语句,或者是使用BEGIN...END构造符合语句,构造可以被嵌套。
IF语句包含多个条件判断,根据结果为TRUE、FALSE执行语句,与编程语言中的if、else if、else语法类似,其语法格式如下:
IF expr_condition THEN statement_list
[ELSE expr_condtion THEN statement_list] ...
[ELSE statement_list]
END IF
示例:
判断正数、负数、既不是正数也不是负数
IF num < -1 THEN
SELECT 'negative number';
ELSEIF num = 0 THEN
SELECT 'not positive number or negative number';
ELSE
SELECT 'positive number';
END IF;
CASE是另一个条件判断的语句,类似于编程语言中的choose、when语法,该语句有两种语法格式。
CASE case_expr
WHEN value THEN statement_list
[WHEN value THEN statement_list] ...
[ELSE statement_list]
END CASE
示例:
判断值等于1、2,或者既不是1也不是2
CASE num
WHEN 1 THEN SELECT 'num is 1';
WHEN 2 THEN SELECT 'num is 2';
ELSE SELECT 'not 1 or 2';
END CASE;
CASE
WHEN expr_condition THEN statement_list
[WHEN expr_condition THEN statement_list] ...
[ELSE statement_list]
END CASE
示例:
CASE语句判断正数、负数、既不是正数也不是负数
CASE
WHEN num < 0 THEN SELECT 'negative number';
WHEN num = 0 THEN SELECT 'not negative number or positive number';
ELSE SELECT 'positive number';
END CASE;
循环语句,用来重复执行某些语句。执行过程中可使用LEAVE语句跳出循环,也可以嵌套IF等判断语句。语法格式如下:
[loop_label:] LOOP
statement_list
END LOOP [loop_label]
注:loop_label表示LOOP语句的标注名称,该参数可以省略。
示例:
num循环执行+1操作,大于等于则跳出循环
DECLARE num INT DEFAULT 0;
loop_add: LOOP
SET num = num + 1;
IF num >= 10 THEN
LEAVE loop_add;
END IF;
END LOOP add_loop;
再次循环,该语句作用是将执行顺序转到语句段开头出,与编程语言的continue类似,该语句只可出现在LOOP、REPEAT、WHILE语句内。语法格式如下:
ITERATE label
示例:
num小于10,重复执行+1操作;num大于等于10则退出循环
DECLARE num INT DEFAULT 0;
loop_add: LOOP
SET num = num + 1;
IF num < 10 THEN
ITERATE loop_add;
ELSE
LEAVE loop_add;
END IF;
END LOOP loop_add;
创建一个带判断条件的循环过程,每次语句执行完毕之后,会对条件表达式进行判断,若表达式为TRUE则循环结束,否则重复执行。语法类似于编程语言do...while,语法格式:
[repeat_label:] REPEAT
statement_list
UNTIL expr_condtion
END REPEAT [repeat_label]
示例:
num值小于10之前重复执行+1
DECLARE num INT DEFAULT 0;
REPEAT
SET num = num + 1;
UNTIL num >= 10
END REPEAT;
创建一个带判断条件的循环过程,与REPEAT不同,WHILE语句先判断表达式,为真则执行循环内的语句,否则退出循环。与编程语言的while类似。语法格式如下:
[while_label:] WHILE expr_condition DO
statement_list
END WHILE [while_label]
示例:
num值小于10,重复执行+1
DECLARE num int DEFAULT 0;
WHILE num < 10 DO
SET num = num + 1;
END WHILE;