Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> MySQL

Lặp qua tất cả các hàng của bảng trong MySQL như thế nào?

MySQL không hỗ trợ vòng lặp trực tiếp trong truy vấn đơn lẻ. Để lặp qua từng hàng, bạn sử dụng Stored Procedure kết hợp vòng lặp WHILE.

Cú pháp mẫu:

DELIMITER //
CREATE PROCEDURE ten_thu_tuc()
BEGIN
    DECLARE bien_dem INT DEFAULT 0;
    DECLARE tong_so_hang INT DEFAULT 0;
    SELECT COUNT(*) FROM bang_nguon INTO tong_so_hang;
    WHILE bien_dem < tong_so_hang DO
        INSERT INTO bang_dich(cot1, cot2)
        SELECT cot1, cot2 FROM bang_nguon LIMIT bien_dem, 1;
        SET bien_dem = bien_dem + 1;
    END WHILE;
END //
DELIMITER ;

Ví dụ thực tế: Sao chép dữ liệu từ bảng AllRows sang SecondTableRows.

-- Tạo bảng nguồn
CREATE TABLE AllRows (Id INT, Name VARCHAR(100));
INSERT INTO AllRows VALUES (1,'John'), (100,'Carol'), (300,'Sam'), (400,'Mike');

-- Tạo bảng đích
CREATE TABLE SecondTableRows (StudentId INT, StudentName VARCHAR(100));

-- Tạo stored procedure
DELIMITER //
CREATE PROCEDURE Sp_AllRowsOfATable()
BEGIN
    DECLARE lastRows INT DEFAULT 0;
    DECLARE startRows INT DEFAULT 0;
    SELECT COUNT(*) FROM AllRows INTO lastRows;
    SET startRows = 0;
    WHILE startRows < lastRows DO
        INSERT INTO SecondTableRows(StudentId, StudentName)
        SELECT Id, Name FROM AllRows LIMIT startRows, 1;
        SET startRows = startRows + 1;
    END WHILE;
END //
DELIMITER ;

-- Gọi thủ tục
CALL Sp_AllRowsOfATable();

-- Kiểm tra kết quả
SELECT * FROM SecondTableRows;

Kết quả

+-----------+-------------+
| StudentId | StudentName |
+-----------+-------------+
|         1 | John        |
|       100 | Carol       |
|       300 | Sam         |
|       400 | Mike        |
+-----------+-------------+

Lưu ý: Cách này chủ yếu dùng cho mục đích học tập hoặc xử lý logic phức tạp hàng đơn. Với dữ liệu lớn, hãy dùng INSERT ... SELECT một lần để hiệu quả hơn.