MySQL--流程控制結構
阿新 • • 發佈:2020-08-03
一、分支結構
#1.if 函式
語法:if(條件 , 值1,值2)功能:實現雙分支
應用在begin end中或外面 #2.case 結構
語法:
情況1:類似於switch
case 變數或表示式
when 值1 then 語句1;
when 值2 then 語句2;
...
else 語句n;
end 情況2:
case
when 條件1 then 語句1;
when 條件2 then 語句2;
...
else 語句n;
if 條件 1 then 語句1;
else if 條件2 then 語句2;
....
else 語句n;
end if;
功能:類似於多重if 只能應用在begin end 中 #案例1:建立函式,實現傳入成績,如果成績>90,返回A,如果成績>80,返回B,如果成績>60,返回C,否則返回D
CREATE FUNCTION test_if(score FLOAT) RETURNS CHAR BEGIN#案例2:建立儲存過程,如果工資<2000,則刪除,如果5000>工資>2000,則漲工資1000,否則漲工資500DECLARE ch CHAR DEFAULT 'A'; IF score>90 THEN SET ch='A'; ELSEIF score>80 THEN SET ch='B'; ELSEIF score>60 THEN SET ch='C'; ELSE SET ch='D'; END IF; RETURN ch; END $ SELECT test_if(87)$
CREATE PROCEDURE test_if_pro(IN sal DOUBLE#改進--案例1:建立函式,實現傳入成績,如果成績>90,返回A,如果成績>80,返回B,如果成績>60,返回C,否則返回D) BEGIN IF sal<2000 THEN DELETE FROM employees WHERE employees.salary=sal; ELSEIF sal>=2000 AND sal<5000 THEN UPDATE employees SET salary=salary+1000 WHERE employees.`salary`=sal; ELSE UPDATE employees SET salary=salary+500 WHERE employees.`salary`=sal; END IF; END $ CALL test_if_pro(2100)$
CREATE FUNCTION test_case(score FLOAT) RETURNS CHAR BEGIN DECLARE ch CHAR DEFAULT 'A'; CASE #------case塊 WHEN score>90 THEN SET ch='A'; WHEN score>80 THEN SET ch='B'; WHEN score>60 THEN SET ch='C'; ELSE SET ch='D'; END CASE; RETURN ch; END $ SELECT test_case(56)$
二、迴圈結構
分類:while、loop、repeat 迴圈控制: iterate類似於 continue,繼續,結束本次迴圈,繼續下一次
leave 類似於 break,跳出,結束當前所在的迴圈 #1.while 語法: 【標籤:】while 迴圈條件 do
迴圈體;
end while【 標籤】; 聯想: while(迴圈條件){ 迴圈體;
} #2.loop 語法:
【標籤:】loop
迴圈體;
end loop 【標籤】; 可以用來模擬簡單的死迴圈 #3.repeat
語法:
【標籤:】repeat
迴圈體;
until 結束迴圈的條件
end repeat 【標籤】; #1.沒有新增迴圈控制語句
#案例:批量插入,根據次數插入到admin表中多條記錄
DROP PROCEDURE pro_while1$ CREATE PROCEDURE pro_while1(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_while1(100)$
/* java 對應
int i=1;while(i<=insertcount){ //插入
i++; } */
#2.新增leave語句 #案例:批量插入,根據次數插入到admin表中多條記錄,如果次數>20則停止
TRUNCATE TABLE admin $ DROP PROCEDURE test_while1 $ CREATE PROCEDURE test_while1 (IN insertCount INT) BEGIN DECLARE i INT DEFAULT 1 ; a:WHILE i<=insertCount DO INSERT INTO admin(username,`password`) VALUES(CONCAT('xiaohua',i),'0000'); IF i>=20 THEN LEAVE a; END IF; SET i=i+1; END WHILE a; END $ CALL test_while1(100)$#3.新增iterate語句 #案例:批量插入,根據次數插入到admin表中多條記錄,只插入偶數次
TRUNCATE TABLE admin$ DROP PROCEDURE test_while1$ CREATE PROCEDURE test_while1(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('xiaohua',i),'0000'); END WHILE a; END $ CALL test_while1(100)$
/*
int i=0;while(i<=insertCount){
i++;
if(i%2==0){
continue;
}
插入
} */