MySQL WHILE Loop

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

MySQL WHILE循环语句简介

WHILE循环是一种循环语句,只要条件为真,就会重复执行代码块。

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

[begin_label:] WHILE search_condition DO
    statement_list
END WHILE [end_label]
Code language: SQL (Structured Query Language) (sql)

在这个语法中:

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

WHILE在每次迭代开始时检查search_condition

如果search_condition计算结果为TRUE ,则​​只要search_conditionTRUEWHILE就会执行statement_list

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

其次,指定将在DOEND 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)
);
Code language: SQL (Structured Query Language) (sql)

其次,创建一个新的存储过程以将日期插入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 ;
Code language: SQL (Structured Query Language) (sql)

第三,创建一个新的存储过程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 ;
Code language: SQL (Structured Query Language) (sql)

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

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

LoadCalendars()存储过程中:

首先,声明一个counterdt变量来保存立即值。 counterdt的默认值分别是1startDate

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

  • 调用存储过程InsertCalendar()calendars表中插入一行。
  • counter加一。另外,使用DATE_ADD()函数将dt添加一天。

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

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

CALL LoadCalendars('2019-01-01',31);
Code language: SQL (Structured Query Language) (sql)

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

本教程有帮助吗?