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,则只要search_condition为TRUE,WHILE就会执行statement_list。
WHILE循环称为预测试循环,因为它在statement_list执行之前检查search_condition。
其次,指定一个或多个将在DO和END WHILE关键字之间执行的语句。
第三,在循环结构的开头和结尾为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)
);
其次,创建一个新的存储过程以在日历表中插入一个日期:
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(),它将从开始日期开始的天数加载到日历表中。
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是插入日历表中的开始日期。
day是从startDate开始加载的天数。
在LoadCalendars()存储过程中:
首先,声明一个计数器和dt变量以保留立即值。
counter和dt的默认值分别为1和startDate。
然后,检查计数器是否少于或等于一天,如果是:
调用存储过程InsertCalendar()将行插入日历表。
将计数器增加一。
另外,使用DATE_ADD()函数将dt增加一天。
WHILE循环将日期重复插入日历表中,直到计数器等于天。
以下语句调用存储过程LoadCalendars()从2019年1月1日开始将31天加载到日历表中。
CALL LoadCalendars('2019-01-01',31);
在本教程中,您学习了如何使用MySQL WHILE循环来重复执行一个或多个语句,只要条件为真。

