摘要:在本教程中,您将学习如何使用 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_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)
);
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()
存储过程中:
首先,声明一个counter
和dt
变量来保存立即值。 counter
和dt
的默认值分别是1
和startDate
。
然后,检查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
循环在条件为真时重复执行一个或多个语句。