MySQL WHILE 循环

总结:在本教程中,您将学习如何使用 MySQL WHILE 循环语句,只要条件为真就重复执行一个或多个语句。

MySQL WHILE 循环语句介绍

该 WHILE 循环是,只要反复的条件为真执行的代码块的循环语句。

以下是该 WHILE 语句的基本语法:

[begin_label:] WHILE search_condition DO
    statement_list
END WHILE [end_label]

在这个语法中:

首先,在 WHILE 关键字后指定搜索条件。

该 WHILE 检查 search_condition 在每次迭代的开始。

如果 search_condition 计算结果为 TRUE ,在 WHILE 执行 statement_list ,只要 search_condition 是 TRUE 。

该 WHILE 循环称为预测试循环,因为它 search_condition 在 statement_list 执行之前检查。

其次,指定一个或多个将在 DO 和 END WHILE 关键字之间执行的语句。

第三, WHILE 在循环结构的开头和结尾为语句指定可选标签。

以下流程图说明了 MySQL WHILE 循环语句:

MySQL WHILE 循环

MySQL WHILE 循环语句实例

首先,创建一个名为 calendars 的表,用于存储日期和派生日期信息,例如日、月、季度和年:

CREATE TABLE calendars(
    id INT AUTO_INCREMENT,
    fulldate DATE UNIQUE,
    day TINYINT NOT NULL,
    month TINYINT NOT NULL,
    quarter TINYINT NOT NULL,
    year INT NOT NULL,
    PRIMARY KEY(id)
);

其次,创建一个新的存储过程来向表中插入一个日期 calendars :

DELIMITER $$

CREATE PROCEDURE InsertCalendar(dt DATE)
BEGIN
    INSERT INTO calendars(
        fulldate,
        day,
        month,
        quarter,
        year
    )
    VALUES(
        dt, 
        EXTRACT(DAY FROM dt),
        EXTRACT(MONTH FROM dt),
        EXTRACT(QUARTER FROM dt),
        EXTRACT(YEAR FROM dt)
    );
END$$

DELIMITER ;

第三,创建一个新的存储过程 LoadCalendars() ,它将从开始日期开始的天数加载到 calendars 表中。

DELIMITER $$

CREATE PROCEDURE LoadCalendars(
    startDate DATE, 
    day INT
)
BEGIN

    DECLARE counter INT DEFAULT 1;
    DECLARE dt DATE DEFAULT startDate;

    WHILE counter <= day DO
        CALL InsertCalendar(dt);
        SET counter = counter + 1;
        SET dt = DATE_ADD(dt,INTERVAL 1 day);
    END WHILE;

END$$

DELIMITER ;

存储过程 LoadCalendars() 接受两个参数:

  • startDate 是插入 calendars 表中的开始日期。
  • day 是从 开始加载的天数 startDate 。

在 LoadCalendars() 存储过程中:

首先,声明 a counter 和 dt 变量以保持立即值。默认值 counter 和 dt 是 1 和 startDate 分别。

然后,检查 是否 counter 小于或等于 day ,如果是:

  • 调用存储过程 InsertCalendar() 向 calendars 表中插入一行。
  • 增加 counter 一个。此外, dt 使用该 DATE_ADD() 功能增加一天。

在 WHILE 循环中重复插入日期到 calendars 表,直到 counter 等于 day 。

以下语句调用存储过程 LoadCalendars() 将 31 天加载到从 calendars 开始的表中 January 1st 2019 。

CALL LoadCalendars('2019-01-01',31);

在本教程中,您学习了如何使用 MySQL WHILE 循环在条件为真时重复执行一个或多个语句。