一、三大结构
- 顺序结构
- 分支结构
- 循环结构
二、分支结构
注意 所有的语句只有在DOS界面使用才有效
#1. if
SELECT IF(表达式1,表达式2,表达式3)
如果表达式1 = TRUE 则返回 表达式2,否则返回表达式3
#2. case
1. 类似switch结构
语法:
CASE 变量|表达式|字段
WHEN 要判断的值1 THEN 返回值1或语句1;
WHEN 要判断的值2 THEN 返回值2或语句2;
...
ELSE 要返回的值n或语句
END CASE;
2. 类似多重if结构
语法:
CASE
WHEN 要判断的条件1 THEN 返回值1或语句1;
WHEN 要判断的条件2 THEN 返回值2或语句2;
...
ELSE 要返回的值n
END CASE;
特点:
可以嵌套使用
可以作为独立的语句但是必须在 BEGIN END 语句中才有效。
#案例 根据成绩显示等级
CREATE PROCEDURE test_case(IN score INT)
BEGIN
CASE
WHEN score >=90 THEN SELECT 'A';
WHEN score >=80 THEN SELECT 'B';
WHEN score >=60 THEN SELECT 'C';
ELSE SELECT 'D';
END CASE;
END $
CALL test_case(99)$
#3. if 结构
/*
功能: 实现多重分支
语法:
if 条件1 then 语句1;
elseif 条件2 then 语句2;
...
else 语句n;
end if;
只能用于 BEGIN END 中
*/
#案例1 根据成绩返回等级
CREATE FUNCTION test_if(score INT) RETURNS CHAR
BEGIN
IF score >=90 THEN RETURN 'A';
ELSEIF score >=80 THEN RETURN 'B';
ELSEIF score >=60 THEN RETURN 'C';
ELSE RETURN 'D';
END IF;
END $
#调用
SELECT test_if(99)$
三、循环结构
注意 所有的语句只有在DOS界面使用才有效
/*
分类:
while loop repeat
*/
循环控制:
iterate 类似continue 结束本次循环继续下次循环
leave 类似break 退出循环
1. while
语法
【标签 :】while 循环条件 do
循环体;
end while【标签】;
2. loop
语法
【标签 :loop
循环体;
end loop【标签】;
3. repeat
语法
【标签 :】repeat
循环体;
until 结束循环的条件
end repeat 【标签】;
#案例1 批量插入
DELIMITER $ #设置自定义结束标记
CREATE PROCEDURE pro_while1(IN insertCount INT)
BEGIN
DECLARE i INT DEFAULT 1; #定义局部变量
a:WHILE i <= insertCount DO
INSERT INTO ADMIN(username,PASSWORD) VALUES('rose','666');
SET i = i + 1;
END WHILE a;
END $
#调用
CALL pro_while1(100) $
#删除存储过程
DROP PROCEDURE pro_while1 $
#案例2 批量插入如果次数大于20则退出
#DELIMITER $
CREATE PROCEDURE pro_while2(IN insertCount INT)
BEGIN
DECLARE i INT DEFAULT 1;
a:WHILE i <= insertCount DO
INSERT INTO ADMIN(username,PASSWORD) VALUES(CONCAT('rose',i),'666');
IF i >= 20 THEN LEAVE a;
END IF;
SET i = i + 1;
END WHILE a;
END $
#调用
CALL pro_while2(100) $
#案例3 iterate语句 批量插入偶数次
DELIMITER $
CREATE PROCEDURE pro_while3(IN insertCount INT)
BEGIN
DECLARE i INT DEFAULT 0;
a:WHILE i <= insertCount DO
SET i = i + 1;
IF MOD(i,2) != 0 THEN ITERATE a;
END IF;
INSERT INTO ADMIN(username,PASSWORD) VALUES(CONCAT('xiaohu',i),'666');
END WHILE a;
END $
#调用
CALL pro_while3(100) $