MySQL流程控制

if语句

语法

IF CONDITION THEN

[ELSEIF CONDITION THEN]

[ELSE]

END IF

实践

 CREATE PROCEDURE test_if(IN x INT)
 BEGIN
    IF x>30 THEN SELECT 3;
    ELSEIF X>20 THEN SELECT 2;
    ELSEIF X>10 THEN SELECT 1;
    ELSE SELECT 0; 
    END IF;
 END

case语句

语法

1.CASE VALUE WHEN V1 THEN … [WHEN V2 THEN …] [ELSE …] END CASE
2.CASE WHEN V1 THEN … [WHEN V2 THEN …] [ELSE …] END CASE

实践

CREATE PROCEDURE test_case1(IN score TINYINT(3))
 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

while语句

语法

WHILE condition DO 循环体 END WHERE;

实践

 CREATE PROCEDURE test_while()
 BEGIN
    declare num INT DEFAULT 1;
    declare sum INT DEFAULT 0;
    WHILE num <= 100 DO
        SET sum = sum + num;
        SET num = num + 1;
    END WHILE;
    SELECT sum;
 END

LOOP,LEAVE和ITERATE语句

有两个语句允许您用于控制循环:
LEAVE语句用于立即退出循环,而无需等待检查条件。LEAVE语句的工作原理就类似PHP,C/C++,Java等其他语言的break语句一样。
ITERATE语句允许您跳过剩下的整个代码并开始新的迭代。ITERATE语句类似于PHP,C/C++,Java等中的continue语句。
MySQL还有一个LOOP语句,它可以反复执行一个代码块,另外还有一个使用循环标签的灵活性。

实践

BEGIN
  DECLARE sum INT DEFAULT 0;
  DECLARE i   INT DEFAULT 0;

-- 计算100以内和
    l:LOOP
        SET i   = i + 1;
        SET sum = sum + i;

        IF i >= 100 THEN LEAVE l;
        END IF;
  END LOOP l;
  SELECT sum;
END
BEGIN
    DECLARE sum INT DEFAULT 0;
  DECLARE i   INT DEFAULT 0;

-- 计算100以内奇数和
  l2:LOOP
    IF (i < 100) THEN
      SET i   = i + 1;
            IF (i\%2) THEN 
                SET sum = sum + i;  
            ELSE ITERATE l2;
            END IF;
        ELSE LEAVE l2;
    END IF;
  END LOOP l2;
  SELECT sum;

END

repeat语句

语法

REPEAT 循环体 UNTIL condition END REPEAT

实践

 CREATE PROCEDURE test_repeat()
 BEGIN
    declare num INT DEFAULT 1;
    declare sum INT DEFAULT 0;
    REPEAT
        SET sum = sum + num;
        SET num = num + 1;
    UNTIL num > 100
    END REPEAT;
    SELECT sum;
 END