主题
MySQL 流程控制
流程控制主要用于存储过程、函数和触发器。
IF
sql
IF score >= 90 THEN
SET grade = 'A';
ELSEIF score >= 80 THEN
SET grade = 'B';
ELSE
SET grade = 'C';
END IF;CASE
sql
CASE
WHEN score >= 90 THEN SET grade = 'A';
WHEN score >= 80 THEN SET grade = 'B';
ELSE SET grade = 'C';
END CASE;查询里也可以使用 CASE 表达式:
sql
SELECT
name,
CASE
WHEN status = 1 THEN 'enabled'
WHEN status = 0 THEN 'disabled'
ELSE 'unknown'
END AS status_text
FROM users;WHILE
sql
WHILE i <= total DO
INSERT INTO logs (message) VALUES (CONCAT('row ', i));
SET i = i + 1;
END WHILE;LOOP
sql
read_loop: LOOP
SET i = i + 1;
IF i > total THEN
LEAVE read_loop;
END IF;
END LOOP;REPEAT
sql
REPEAT
SET i = i + 1;
UNTIL i >= total
END REPEAT;LEAVE 和 ITERATE
LEAVE:跳出循环,类似break。ITERATE:进入下一次循环,类似continue。
sql
read_loop: WHILE i < total DO
SET i = i + 1;
IF MOD(i, 2) = 1 THEN
ITERATE read_loop;
END IF;
INSERT INTO logs (message) VALUES (CONCAT('even ', i));
END WHILE;