MySQL流程控制結構
- 順序結構:程式從上到下依次執行
- 分支結構:程式可以從倆潭訓多條路徑中選擇一條執行
- 回圈結構:程式在滿足一定條件的基礎上,重復執行一段代碼
一、分支結構
1.IF函式
功能:實作簡單的雙分支
語法
SELECT IF(運算式1,運算式2,運算式3)
執行順序:
如果運算式1成立,則if函式回傳運算式2的值,否則回傳運算式3的值
應用: 任何地方
2.case結構
情況1:類似于java中的switch陳述句,一般用于實作等值判斷
語法:
CASE 變數|運算式|欄位
WHEN 要判斷的值 THEN 回傳的值1或陳述句1;
WHEN 要判斷的值 THEN 回傳的值2或陳述句2;
…
ELSE 要回傳的值n或陳述句n;
END CASE;
情況2:類似于java中的多重if陳述句,一般實作區間判斷
CASE
WHEN 要判斷的條件1 THEN 回傳的值1或陳述句1;
WHEN 要判斷的條件2 THEN 回傳的值2或陳述句2;
…
ELSE 要回傳的值n或陳述句n;
END CASE;
特點:
①
可以作為運算式,嵌套在其他陳述句中使用,可以放在任何地方
可以作為獨立的陳述句去使用,只能放在begin end中
②
如果when中的值或條件成立,則執行對應的then后面的陳述句,并且結束case
如果都不滿足,則執行else中的陳述句或值
③else可以省略,如果else省略了,并且所有when條件都不滿足,則回傳null
案例
創建存盤程序,根據傳入的成績,來顯示等級,比如傳入的成績,90-100顯示A,80-90顯示B,60-80顯示C,否則顯示D
USE student;
DROP PROCEDURE level_score
delimiter $
CREATE PROCEDURE level_score(IN score INT)
BEGIN
CASE
WHEN 100>=score AND score>=90 THEN SELECT 'A';
WHEN score>=80 THEN SELECT 'B';
WHEN score>=60 THEN SELECT 'C';
ELSE SELECT 'D';
END CASE;
END$
CALL level_score(84)
3.IF結構
功能:實作多重分支
語法:
if 條件1 THEN
ELSEIF 條件2 THEN 陳述句2
…
[ELSE 陳述句n]
END IF
應用:begin end中
案例:創建存盤程序,根據傳入的成績,來顯示等級,比如傳入的成績,90-100回傳A,80-90回傳B,60-80回傳C,否則回傳D
DROP FUNCTION level
delimiter $
CREATE FUNCTION level_grade(grade INT)
RETURNS CHAR
BEGIN
IF 100>=grade AND grade>=90
THEN RETURN 'A';
ELSEIF grade>=80
THEN RETURN 'B';
ELSEIF grade>=60
THEN RETURN 'C';
ELSE RETURN 'D';
END if;
END$
SELECT level_grade(22);
二、回圈結構
分類:
WHILE、LOOP、REPEAT
回圈控制:
- iterate類似于continue,結束本次回圈,繼續下一次
- leave類似于break,結束當前所在回圈
1.WHILE
語法:
[標記]:WHILE 回圈條件 DO
回圈體;
END WHILE [標記];
聯想:
while(回圈條件)
BEGIN
回圈體;
}
2.LOOP
語法
[標記:]LOOP
回圈體;
END LOOP [標記];
可以用來模擬簡單的死回圈
3.REPEAT
語法:
[標記:] REPEAT
回圈體;
UNTIL 結束回圈的條件
END REPEAT [標記];
1.不添加leave陳述句
案例:批量插入,根據次數插入到admin表中多條記錄
USE girls
delimiter $
CREATE PROCEDURE pro_while(IN insertCount INT)
BEGIN
DECLARE i INT DEFAULT 1;
WHILE i<=insertCount DO
INSERT INTO admin(username,password) VALUES(CONCAT('rose',i),'666');
SET i = i+1;
END WHILE;
END $
CALL pro_while(100)
2.添加leave陳述句
案例:批量插入,根據次數插入到admin表中多條記錄,如果次數>20則停止
TRUNCATE TABLE admin
DROP PROCEDURE pro_while
delimiter $
CREATE PROCEDURE pro_while(IN insertCount INT)
BEGIN
DECLARE i INT DEFAULT 1;
a:WHILE i<=insertCount DO
INSERT INTO admin(username,password) VALUES(CONCAT('rose',i),'666');
SET i = i+1;
IF i>20
THEN LEAVE a;
END IF;
END WHILE a;
END $
CALL pro_while(100)
案例:批量插入,根據次數插入到admin表中多條記錄,只插入偶數次
use girls
delimiter $
CREATE PROCEDURE pro_while(IN insertCount INT)
BEGIN
DECLARE i INT DEFAULT 1;
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('rose',i),'666');
END WHILE a;
END $
TRUNCATE TABLE admin
CALL pro_while(100)
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/186504.html
標籤:其他
