MySQL流程控制的使用
流程控制語句,用于將多個SQL語句,劃分或組成成符合業務邏輯的代碼塊
流程控制語句
包括,IF語句、CASE語句、LOOP語句、WHILE語句、LEAVE語句、ITERATE語句、REPEAT語句和WHILE語句
每個流程中,可能包含一個單獨語句,也可以是使用BEGIN……END構造的復合語句,可以嵌套
IF語句
IF語句,是指如果滿足某種條件,根據判斷的結果為TRUE,或者FALSE執行相應的語句
語法格式
IF expr_condition THEN statement_list
[ELSEIF expr_condition THEN statement_list]
[ELSE statement_list]
END IF
IF實現了一個基本的條件構造
參數說明
Expr_condition,表示判斷條件
Statement_list,表示SQL語句列表,它可以包括一個或多個語句
如果,expr_condition求值為TRUE,相應的SQL語句列表就會被執行,如果,沒有expr_condition匹配,則ELSE子句李的語句列表被執行
注意,MySQL中還有一個IF()函數,不同于這里的IF語句
IF val IS NULL
THEN SELECT ‘val is NULL’;
ELSE SELECT ‘val is not NULL’;
END IF;
判斷val值是否為空
如果,val值為空,輸出字符串val is NULL,否則,輸出字符串val is not NULL
注意,IF語句都需要使用END IF來結束,不可省略
CASE語句
另一個進行條件判斷的語句,該語句有兩種語句格式
第一種格式
CASE case_expr
WHEN when_value THEN statement_list
[WHEN when_value THEN statement_list]……
[ELSE statement_list]
END CASE
參數說明
Case_expr,表示條件判斷的表達式,決定了哪一個WHEN自己會被執行
When_value,表示表達式可能的值,如果,某個when_value表達式與case_expr表達式結果相同,則執行對應THEN關鍵字后的statement中的語句
Statement_list,表示不同when_value值的執行語句
使用CASE流程控制語句,第一種格式,判斷val值等于1、等于2,或者兩者都不等于
CASE val
WHEN 1 THEN SELECT ‘val is 1’;
WHEN 2 THEN SELECT ‘val is 2’;
ELSE SELECT ‘val is not 1 or 2’;
END CASE;
當val值為1時,輸出字符串val is 1
當val值為2時,輸出字符串val is 2
否則,輸出字符串val is not 1 or 2
第二種格式
CASE
WHEN expr_condition THEN statement_list
[WHEN expr_condition THEN statement_list]
[ELSE statement_list]
END CASE;
注意,這里存儲過程中的CASE語句,與控制流程函數中的SQL CASE表達式中的CASE是不同的
存儲過程中,CASE語句不能有ELSE NULL子句,并且,用END CASE代替END來終止
LOOP語句
LOOP循環語句,用來重復執行某些語句
與IF和CASE語句相比,LOOP只是創建一個循環操作的過程,并不進行條件判斷
LOOP內的語句一直重復執行,知道跳出循環語句
語法格式
[loop_label:] LOOP
Statement_list
END LOOP [loop_label]
參數說明
Loop_label,表示LOOP語句的標注名稱,該參數可以省略
Statement,表示需要循環執行的語句
使用LOOP 語句進行循環操作
DECLARE id INT DEFAULT 0;
Add_loop:LOOP
SET id=id+1;
IF id>=10 THEN LEAVE add_loop;
END IF;
END LOOP add_loop;
循環執行了id加1的操作
當id值小于10時,循環重復執行,當id值大于或者等于10時,使用LEAVE語句退出循環
LEAVE語句
用于退出任何被標注的流程控制結構
語法格式
LEAVE label
參數說明
label,表示循環的標志
通常情況下,LEAVE語句與BEGIN……END、循環語句一起使用
ITERATE,意思是再次循環
ITERATE語句
用于將執行順序轉到語句段的開頭處
語法格式
ITERATE lable
參數說明
Lable,表示循環的標志
注意,ITERATE語句只可以出現在,LOOP、REPEAT和WHILE語句中
演示ITERATE語句,在LOOP語句內的使用
CREATE PROCEDURE doiterate()
BEGIN
DECLARE p1 INT DEFAULT 0;
My_loop:LOOP
SET p1=p1+1;
IF p1<10 THEN ITERATE my_loop;
ELSEIF p1>20 THEN LEAVE my_loop;
END IF;
SELECT ‘p1 is between 10 and 20’;
END LOOP my_loop;
END
P1的初始值為0,如果,p1的值小于10時,重復執行p1加1的操作,當p1大于或等于10,并且小于20時,打印消息p1 is between 10 and 20,當p1大于20時,退出循環
REPEAT語句
用于創建一個帶有條件判斷的循環過程
每次語句執行完畢之后,會對條件表達式進行判斷,如果表達式為真,則循環結束,否則,重復執行循環中的語句
語法格式
[repeat_lable:] REPEAT
Statement_list
UNTIL expr_condition
END REPEAT [repeat_lable]
參數說明
Repeat_lable,為REPEAT語句的標注名稱,該參數是可選的
REPEAT語句內的語句,或語句群被重復,直至expr_condition為真
使用REPEAT語句,執行循環過程
DECLARE id INT DEFAULT 0;
REPEAT
SET id=id+1;
UNTIL id>=10;
END REPEAT;
WHILE語句
創建一個帶條件判斷的循環過程
與REPEAT不同的是,WHILE在語句執行時,先對指定的條件進行判斷,如果為真,則執行循環內的語句,否則退出循環
語法格式
[while_lable:] WHILE expr_condition DO
Statement_list
END WHILE [while_lable]
參數說明
While_lable,為WHILE語句的標注名稱
Expr_condition,為進行判斷的表達式,如果表達式為真,WHILE語句內的語句,或語句群就被執行,直至expr_condition為假,退出循環
使用WHILE語句,進行循環操作
DECLARE i INT DEFAULT 0;
WHILE i<10 DO
SET i=i+1;
END WHILE;
總結
以上是生活随笔為你收集整理的MySQL流程控制的使用的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: MySQL光标的使用
- 下一篇: MySQL调用存储过程