MySQL流程控制语句主要包括IF语句、CASE语句、LOOP语句、WHILE语句和REPEAT语句,用于存储过程和函数中控制执行流程。基本语法示例:DELIMITER $$ CREATE PROCEDURE test_if() BEGIN DECLARE score INT DEFAULT 85; IF score >= 90 THEN SELECT '优秀'; ELSEIF score >= 80 THEN SELECT '良好'; ELSE SELECT '及格'; END IF; END$$ DELIMITER ; 这就是条件判断的基本用法。
IF语句详解
IF语句用于条件判断,语法是IF 条件 THEN 语句列表 [ELSEIF 条件 THEN 语句列表] ... [ELSE 语句列表] END IF; 例如,在存储过程中根据变量值输出不同结果,非常适合多分支判断,直接复制运行即可测试效果。
CASE语句用法
CASE语句有两种形式:简单CASE和搜索CASE。简单CASE:CASE 变量 WHEN 值1 THEN 语句 WHEN 值2 THEN 语句 ELSE 语句 END CASE; 搜索CASE:CASE WHEN 条件1 THEN 语句 ... ELSE 语句 END CASE; 它比IF更简洁,尤其处理多个等值比较时。
WHILE循环控制
WHILE语句语法:WHILE 条件 DO 语句列表 END WHILE; 示例:DELIMITER $$ CREATE PROCEDURE test_while() BEGIN DECLARE i INT DEFAULT 1; WHILE i <= 5 DO SELECT i; SET i = i + 1; END WHILE; END$$ DELIMITER ; 循环直到条件不成立,注意防止无限循环。
REPEAT循环技巧
REPEAT语句语法:REPEAT 语句列表 UNTIL 条件 END REPEAT; 它至少执行一次循环,直到条件为真才退出。示例中用SET i = i + 1; UNTIL i > 5 END REPEAT; 适合不确定循环次数的场景。
LOOP语句和LEAVE
LOOP语句创建无条件循环:label: LOOP 语句列表 [LEAVE label;] END LOOP label; 用LEAVE跳出循环,ITERATE用于跳过本次循环继续下次,非常灵活控制流程。
实际应用技巧
在批量数据处理中,用WHILE结合CURSOR遍历结果集:DECLARE done INT DEFAULT 0; DECLARE cur CURSOR FOR SELECT * FROM table; DECLARE CONTINUE HANDLER FOR NOT FOUND SET done=1; OPEN cur; read_loop: LOOP FETCH cur INTO var; IF done THEN LEAVE read_loop; END IF; ... END LOOP; 这就是高效遍历技巧。
FAQ
Q: MySQL流程控制只能在存储过程里用吗?
A: 是的,只能用于存储过程、函数和触发器中,不能直接在SQL语句中使用。
Q: 怎么避免无限循环?
A: 总是设置退出条件,用计数器或标志变量,并在循环中更新。
Q: IF和CASE哪个性能更好?
A: 类似,但CASE在多值匹配时更高效。
Q: DELIMITER $$ 是什么作用?
A: 改变语句分隔符,避免;与END冲突。