MySQL精講之六:流程控制

MySQL精講之六:流程控制

免費學習推薦:mysql視頻教程

文章目錄

  • 分支結構
    • IF函數
    • case結構
    • IF結構
  • 循環結構

mysql中的流程控制和其他編程語言中的類似,也分為三種:順序結構、分支結構、循環結構。前幾篇文章中用到的基本上都是順序結構(除了IF函數),下面主要針對分支結構和循環結構進行介紹。

分支結構

IF函數

語法:IF(表達式1,表達式2,表達式3)
說明:如果表達式1成立,則執行表達式2,否則執行表達式3

case結構

case結構有兩種語法:
MySQL精講之六:流程控制
特點:

  • 作為表達式使用,嵌套在其他語句中使用,在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的流程控制,嘗試完成下列習題
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教程(視頻)

MySQL精講之六:流程控制MySQL精講之六:流程控制MySQL精講之六:流程控制

? 版權聲明
THE END
喜歡就支持一下吧
點贊10 分享