• mysql 循环的写法


    mysql8 官方文档中明确说明不支持for 循环

    MySQL does not support FOR loops.

    mysql的循环写法有以下3种

    下面的三种存储过程的循环写法都能实现向test表中插入(p1,10)之间的数据。p1作为存储过程的传入参数存在。 

    create table test (id int);

    1. loop 语句

    语法:

    [begin_label:] LOOP

    statement_list

    END LOOP [end_label]

    离开循环体,使用leave 或者return,使用return会直接退出存储过程。

    delimiter //
    CREATE PROCEDURE p_test(p1 INT)
    BEGIN
    label1: LOOP
    SET p1 = p1 + 1;
    IF p1 < 10 THEN
    insert into test values(p1);
    ITERATE label1;   --重复执行标签为label1的循环体

    END IF;

    LEAVE label1;
    END LOOP label1;
    END;
    //
    delimiter ;

    call doiterate(2);

    mysql> select * from test;
    +------+
    | id |
    +------+
    | 3 |
    | 4 |
    | 5 |
    | 6 |
    | 7 |
    | 8 |
    | 9 |
    +------+

    上面程序的等价写法。

    delimiter //
    CREATE PROCEDURE p_test(p1 INT)
    BEGIN
    label1: LOOP

    SET p1 = p1 + 1;

    IF p1 >=10 THEN
    LEAVE label1;
    END IF;
    insert into test values(p1);

    ITERATE label1;  

    END LOOP label1;

    END;
    //
    delimiter ;

    loop语句中需要iterate  与 leave 语句的配合使用。

    2.while 语句

    语法:

    [begin_label:] WHILE search_condition DO

    statement_list

    END WHILE [end_label]

     delimiter //

    CREATE PROCEDURE p_test(p1 INT)
    BEGIN
    set p1=p1+1;
    while p1<10 do
    insert into test values(p1);
    SET p1 = p1 + 1;
    end while;

    END;
    //
    delimiter ;

    3. repeat 语句

     语法:

    [begin_label:] REPEAT

    statement_list

    UNTIL search_condition END REPEAT [end_label]

    delimiter //
    CREATE PROCEDURE p_test(p1 INT)
    BEGIN
    set p1=p1+1;
    repeat
    insert into test values(p1);
    SET p1 = p1 + 1;
    until p1>=10 end repeat;

    END;
    //
    delimiter ;

  • 相关阅读:
    合并二叉树
    剑指 Offer 68
    剑指 Offer 42. 连续子数组的最大和
    C语言 递归实现迷宫寻路问题
    C语言数据结构 统计英文文字每个“单词”出现次数
    C语言 双链表的频度排序管理
    C语言 插入排序使链表递增
    c语言 简单的天数计算器
    数据结构 链表的头插法逆置
    C语言 删除指定的单词
  • 原文地址:https://www.cnblogs.com/JennyYu/p/16156660.html
Copyright © 2020-2023  润新知