Tóm lược. trong hướng dẫn này, bạn sẽ học cách sử dụng câu lệnh vòng lặp WHILE
của MySQL để thực thi một hoặc nhiều câu lệnh lặp đi lặp lại miễn là một điều kiện là đúng
Giới thiệu về câu lệnh vòng lặp MySQL WHILE
Vòng lặp WHILE
là một câu lệnh vòng lặp thực thi một khối mã lặp đi lặp lại miễn là một điều kiện là đúng
Đây là cú pháp cơ bản của câu lệnh WHILE
Code language: SQL [Structured Query Language] [sql]
[begin_label:] WHILE search_condition DO statement_list END WHILE [end_label]
Trong cú pháp này
Đầu tiên, chỉ định điều kiện tìm kiếm sau từ khóa WHILE
WHILE
kiểm tra
1 ở đầu mỗi lần lặp
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]
Nếu
1 đánh giá thànhCode language: SQL [Structured Query Language] [sql]
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] ];
3, thìCode language: SQL [Structured Query Language] [sql]
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] ];
WHILE
thực hiện 5 miễn làCode language: SQL [Structured Query Language] [sql]
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] ];
1 làCode language: SQL [Structured Query Language] [sql]
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] ];
3Code language: SQL [Structured Query Language] [sql]
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] ];
Vòng lặp WHILE
được gọi là vòng lặp kiểm tra trước vì nó kiểm tra
1 trước khiCode language: SQL [Structured Query Language] [sql]
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] ];
5 thực thiCode language: SQL [Structured Query Language] [sql]
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] ];
Thứ hai, chỉ định một hoặc nhiều câu lệnh sẽ thực thi giữa các từ khóa
1 vàCode language: SQL [Structured Query Language] [sql]
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 ;
2Code language: SQL [Structured Query Language] [sql]
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 ;
Thứ ba, chỉ định các nhãn tùy chọn cho câu lệnh WHILE
ở đầu và cuối cấu trúc vòng lặp
Lưu đồ sau đây minh họa câu lệnh vòng lặp MySQL WHILE
Ví dụ về câu lệnh vòng lặp MySQL WHILE
Đầu tiên, tạo một bảng có tên_______9_______6 lưu trữ ngày và thông tin ngày bắt nguồn như ngày, tháng, quý và năm
Code language: SQL [Structured Query Language] [sql]
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] ];
Thứ hai, tạo một thủ tục được lưu trữ mới để chèn một ngày vào bảng
6Code language: SQL [Structured Query Language] [sql]
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]
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 ;
Thứ ba, tạo một thủ tục được lưu trữ mới
8 tải một số ngày bắt đầu từ ngày bắt đầu vào bảngCode language: SQL [Structured Query Language] [sql]
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 ;
6Code language: SQL [Structured Query Language] [sql]
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 ;
DELIMITER $$ CREATE PROCEDURE LoadCalendars[ startDate DATE, day INT ] BEGIN DECLARE counter INT DEFAULT 1; DECLARE dt DATE DEFAULT startDate; WHILE counter