主頁(yè) > 知識(shí)庫(kù) > mysql存儲(chǔ)過(guò)程之循環(huán)語(yǔ)句(WHILE,REPEAT和LOOP)用法分析

mysql存儲(chǔ)過(guò)程之循環(huán)語(yǔ)句(WHILE,REPEAT和LOOP)用法分析

熱門(mén)標(biāo)簽:萊西市地圖標(biāo)注 常州網(wǎng)絡(luò)外呼系統(tǒng)開(kāi)發(fā) 安徽ai電話電銷(xiāo)機(jī)器人有效果嗎 巫師三血與酒地圖標(biāo)注 在哪里申請(qǐng)400電話 外呼系統(tǒng)電銷(xiāo)受騙 400電話申請(qǐng)信用卡 走過(guò)哪個(gè)省地圖標(biāo)注 銷(xiāo)售語(yǔ)音電話機(jī)器人

本文實(shí)例講述了mysql存儲(chǔ)過(guò)程之循環(huán)語(yǔ)句(WHILE,REPEAT和LOOP)用法。分享給大家供大家參考,具體如下:

MySQL提供循環(huán)語(yǔ)句,允許我們根據(jù)條件重復(fù)執(zhí)行一個(gè)SQL代碼塊其中有三個(gè)循環(huán)語(yǔ)句:WHILE,REPEAT和LOOP,我們接下來(lái)分別看下。首先是WHILE語(yǔ)句來(lái)看下語(yǔ)法:

WHILE expression DO
  statements
END WHILE

WHILE循環(huán)在每次迭代開(kāi)始時(shí)檢查表達(dá)式。 如果expressionevaluates為T(mén)RUE,MySQL將執(zhí)行WHILE和END WHILE之間的語(yǔ)句,直到expressionevaluates為FALSE。 WHILE循環(huán)稱(chēng)為預(yù)先測(cè)試條件循環(huán),因?yàn)樗偸窃趫?zhí)行前檢查語(yǔ)句的表達(dá)式。來(lái)看下流程圖:

完事咱們嘗試在存儲(chǔ)過(guò)程中使用WHILE循環(huán)語(yǔ)句,看個(gè)實(shí)例:

DELIMITER $$
 DROP PROCEDURE IF EXISTS test_mysql_while_loop$$
 CREATE PROCEDURE test_mysql_while_loop()
 BEGIN
 DECLARE x INT;
 DECLARE str VARCHAR(255);
 SET x = 1;
 SET str = '';
 WHILE x = 5 DO
 SET str = CONCAT(str,x,',');
 SET x = x + 1; 
 END WHILE;
 SELECT str;
 END$$
DELIMITER ;

在上面的test_mysql_while_loop存儲(chǔ)過(guò)程中,它的操作是先來(lái)重復(fù)構(gòu)建str字符串,直到x變量的值大于5,完事使用select語(yǔ)句顯示最終的字符串。我們要注意的是,如果不初始化x變量的值,那么它默認(rèn)值為NULL。 因此,WHILE循環(huán)語(yǔ)句中的條件始終為T(mén)RUE,并且我們將有一個(gè)不確定的循環(huán),這是不可預(yù)料的。廢話不多說(shuō),我們先來(lái)調(diào)用test_mysql_while_loopstored存儲(chǔ)過(guò)程:

CALL test_mysql_while_loop();

執(zhí)行上面查詢語(yǔ)句,得到以下結(jié)果:

mysql> CALL test_mysql_while_loop();
+------------+
| str    |
+------------+
| 1,2,3,4,5, |
+------------+
1 row in set
Query OK, 0 rows affected

完事再來(lái)看REPEAT循環(huán)語(yǔ)句的語(yǔ)法結(jié)構(gòu):

REPEAT
 statements;
UNTIL expression
END REPEAT

上述sql首先被mysql執(zhí)行,完事mysql會(huì)評(píng)估求值表達(dá)式(expression),如果表達(dá)式(expression)的計(jì)算結(jié)果為FALSE,則mysql將重復(fù)執(zhí)行該語(yǔ)句,直到該表達(dá)式計(jì)算結(jié)果為T(mén)RUE。因?yàn)镽EPEAT循環(huán)語(yǔ)句在執(zhí)行語(yǔ)句后檢查表達(dá)式(expression),因此REPEAT循環(huán)語(yǔ)句也稱(chēng)為測(cè)試后循環(huán)。咱們來(lái)看下流程圖:

完事咱們?cè)賮?lái)使用REPEAT循環(huán)語(yǔ)句重寫(xiě)test_mysql_while_loop存儲(chǔ)過(guò)程:

DELIMITER $$
 DROP PROCEDURE IF EXISTS mysql_test_repeat_loop$$
 CREATE PROCEDURE mysql_test_repeat_loop()
 BEGIN
 DECLARE x INT;
 DECLARE str VARCHAR(255);
 SET x = 1;
    SET str = '';
 REPEAT
 SET str = CONCAT(str,x,',');
 SET x = x + 1;
    UNTIL x > 5
    END REPEAT;
    SELECT str;
 END$$
DELIMITER ;

我們要注意的是UNTIL表達(dá)式中沒(méi)有分號(hào)(;)。執(zhí)行上面查詢語(yǔ)句,得到以下結(jié)果:

mysql> CALL mysql_test_repeat_loop();
+------------+
| str    |
+------------+
| 1,2,3,4,5, |
+------------+
1 row in set
Query OK, 0 rows affected

最后咱們?cè)賮?lái)看一個(gè)使用LOOP循環(huán)語(yǔ)句的示例:

CREATE PROCEDURE test_mysql_loop()
 BEGIN
 DECLARE x INT;
    DECLARE str VARCHAR(255);
 SET x = 1;
    SET str = '';
 loop_label: LOOP
 IF x > 10 THEN 
 LEAVE loop_label;
 END IF;
 SET x = x + 1;
 IF (x mod 2) THEN
   ITERATE loop_label;
 ELSE
  SET str = CONCAT(str,x,',');
 END IF;
  END LOOP;
  SELECT str;
END;

上述sql具體作用如下:

  • 以上存儲(chǔ)過(guò)程僅構(gòu)造具有偶數(shù)字符串的字符串,例如2,4,6等。
  • 在LOOP語(yǔ)句之前放置一個(gè)loop_label循環(huán)標(biāo)簽。
  • 如果x的值大于10,則由于LEAVE語(yǔ)句,循環(huán)被終止。
  • 如果x的值是一個(gè)奇數(shù),ITERATE語(yǔ)句忽略它下面的所有內(nèi)容,并開(kāi)始一個(gè)新的迭代。
  • 如果x的值是偶數(shù),則ELSE語(yǔ)句中的塊將使用偶數(shù)構(gòu)建字符串。

執(zhí)行上面查詢語(yǔ)句,得到以下結(jié)果:

mysql> CALL test_mysql_loop();
+-------------+
| str     |
+-------------+
| 2,4,6,8,10, |
+-------------+
1 row in set
Query OK, 0 rows affected

完事咱們?cè)賮?lái)看下控制循環(huán)的兩個(gè)關(guān)鍵詞:

  • LEAVE語(yǔ)句用于立即退出循環(huán),而無(wú)需等待檢查條件。LEAVE語(yǔ)句的工作原理就類(lèi)似PHP,C/C++,java等其他語(yǔ)言的break語(yǔ)句一樣。
  • ITERATE語(yǔ)句允許您跳過(guò)剩下的整個(gè)代碼并開(kāi)始新的迭代。ITERATE語(yǔ)句類(lèi)似于PHP,C/C++,Java等中的continue語(yǔ)句。

好啦,本次記錄就到這里了。

更多關(guān)于MySQL相關(guān)內(nèi)容感興趣的讀者可查看本站專(zhuān)題:《MySQL存儲(chǔ)過(guò)程技巧大全》、《MySQL常用函數(shù)大匯總》、《MySQL日志操作技巧大全》、《MySQL事務(wù)操作技巧匯總》及《MySQL數(shù)據(jù)庫(kù)鎖相關(guān)技巧匯總》

希望本文所述對(duì)大家MySQL數(shù)據(jù)庫(kù)計(jì)有所幫助。

您可能感興趣的文章:
  • MySQL select、insert、update批量操作語(yǔ)句代碼實(shí)例
  • Python MySQLdb 執(zhí)行sql語(yǔ)句時(shí)的參數(shù)傳遞方式
  • mysql創(chuàng)建表的sql語(yǔ)句詳細(xì)總結(jié)
  • MySQL模糊查詢語(yǔ)句整理集合
  • Mysql數(shù)據(jù)庫(kù)之常用sql語(yǔ)句進(jìn)階與總結(jié)
  • Mysql數(shù)據(jù)庫(kù)之sql基本語(yǔ)句小結(jié)
  • 簡(jiǎn)單了解mysql語(yǔ)句書(shū)寫(xiě)和執(zhí)行順序

標(biāo)簽:河北 來(lái)賓 鞍山 煙臺(tái) 黃石 陽(yáng)江 果洛 赤峰

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《mysql存儲(chǔ)過(guò)程之循環(huán)語(yǔ)句(WHILE,REPEAT和LOOP)用法分析》,本文關(guān)鍵詞  mysql,存儲(chǔ),過(guò)程,之,循環(huán),;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問(wèn)題,煩請(qǐng)?zhí)峁┫嚓P(guān)信息告之我們,我們將及時(shí)溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無(wú)關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《mysql存儲(chǔ)過(guò)程之循環(huán)語(yǔ)句(WHILE,REPEAT和LOOP)用法分析》相關(guān)的同類(lèi)信息!
  • 本頁(yè)收集關(guān)于mysql存儲(chǔ)過(guò)程之循環(huán)語(yǔ)句(WHILE,REPEAT和LOOP)用法分析的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章