免費學習推薦:mysql視頻教程
文章目錄
- 分支結構
-
- IF函數
- case結構
- IF結構
- 循環結構
mysql中的流程控制和其他編程語言中的類似,也分為三種:順序結構、分支結構、循環結構。前幾篇文章中用到的基本上都是順序結構(除了IF函數),下面主要針對分支結構和循環結構進行介紹。
分支結構
IF函數
語法:IF(表達式1,表達式2,表達式3)
說明:如果表達式1成立,則執行表達式2,否則執行表達式3
case結構
case結構有兩種語法:
特點:
- 作為表達式使用,嵌套在其他語句中使用,在BEGIN-END中和BEGIN-END外都可以使用。
- 作為獨立的語句使用,只能放在BEGIN-END中。
- 如果省略ELSE,且所有的WHEN都不滿足,則返回null。
【演示case作為獨立的語句】# 創建存儲過程,根據傳入的成績,顯示等級:90-100顯示A 、 80-90顯示B、60-80顯示C、否則顯示DCREATE PROCEDURE test_case(IN score INT)BEGIN CASE WHEN score>=90 AND score<=100 THEN SELECT 'A'; WHEN score>=80 THEN SELECT 'B'; WHEN score>=60 THEN SELECT 'C'; ELSE SELECT 'D'; END CASE;END $CALL test_case(95)$
IF結構
語法:
if 條件1 then 語句1;
elseif 條件2 then 語句2;
…
[else 語句n;]
end if;
【演示IF結構】# 根據傳入的成績,顯示等級:90-100顯示A 、 80-90顯示B、60-80顯示C、否則顯示DCREATE FUNCTION test_if(score INT) RETURNS CHARBEGIN IF score>=90 AND score<=100 THEN RETURN 'A'; ELSEIF score>=80 THEN RETURN 'B'; ELSEIF score>=60 THEN RETURN 'C'; ELSE RETURN 'D'; END IF;END $SELECT test_if(61)$
循環結構
mysql中的循環結構有下面三種:
名稱 | 語法 | 特點 |
---|---|---|
while | @@##@@ | 先判斷后執行 |
repeat,類似Java中的do-wile語句 | @@##@@ | 先執行后判斷 |
loop | @@##@@ | 沒有條件的死循環 |
可以在循環控制中使用的關鍵字有iterate(類似于Java中的continue)和leave(類似于Java中的break)
【演示簡單的循環結構】# 案例:批量插入,根據次數插入到admin表中多條記錄.CREATE PROCEDURE pro_while1(IN insertCount INT)BEGIN DECLARE i INT DEFAULT 1; WHILE i<=insertCount DO INSERT INTO admin(username,PASSWORD) VALUES(CONCAT('Lili',i),'666'); SET i=i+1; END WHILE;END $CALL pro_while1(100)$--------------------------------------------------------------------------------------------【演示添加了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),'2333'); IF i>=20 THEN LEAVE a; END IF; SET i=i+1; END WHILE a;END $CALL test_while1(100)$--------------------------------------------------------------------------------------------【演示添加了iterate的語句】# 案例:批量插入,根據次數插入到admin表中,直插入偶數次CREATE PROCEDURE test_while2(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('ming',i),'777'); END WHILE a;END $CALL test_while2(100)$
學習了mysql的流程控制,嘗試完成下列習題
【習題答案】DROP TABLE IF EXISTS stringcontent;CREATE TABLE stringcontent( id INT PRIMARY KEY AUTO_INCREMENT, content VARCHAR(20) );DELIMITER $CREATE PROCEDURE test_pro1(IN insertCount INT)BEGIN DECLARE i INT DEFAULT 1;#定義一個循環變量i,表示插入次數 DECLARE str VARCHAR(26) DEFAULT 'abcdefghijklmnopqrstuvwxyz'; DECLARE strIndex INT DEFAULT 1;#代表起始索引 DECLARE len INT DEFAULT 1;#代表截取的字符的長度 WHILE i<=insertCount DO #兩條生成隨機數的指令原理相同:隨機數*長度+1 SET len=FLOOR(RAND()*(20-strIndex+1)+1);#產生一個隨機整數,代表起始索引1-26 SET strIndex=FLOOR(RAND()*20+1);#產生一個隨機整數,代表截取長度(26-startIndex+1) INSERT INTO stringcontent(content) VALUES(SUBSTR(str,strIndex,len)); SET i=i+1;#循環變量更新 END WHILE;END $CALL test_pro1(10)$SELECT * FROM stringcontent$
更多相關免費學習推薦:mysql教程(視頻)
? 版權聲明
文章版權歸作者所有,未經允許請勿轉載。
THE END