Computer >> Máy Tính >  >> Lập trình >> MySQL

Làm cách nào để tôi có thể lặp qua tất cả các hàng của bảng trong MySQL?

Để lặp qua tất cả các hàng của bảng, hãy sử dụng thủ tục được lưu trữ trong MySQL. Cú pháp như sau -

delimiter //
CREATE PROCEDURE yourProcedureName()
BEGIN
DECLARE anyVariableName1 INT DEFAULT 0;
DECLARE anyVariableName2 INT DEFAULT 0;
SELECT COUNT(*) FROM yourTableName1 INTO anyVariableName1;
SET anyVariableName2 =0;
WHILE anyVariableName2 < anyVariableName1 DO
   INSERT INTO yourTableName2(yourColumnName,...N) SELECT (yourColumnName1,...N)
FROM yourTableName1 LIMIT anyVariableName2,1;
   SET anyVariableName2 = anyVariableName2+1;
END WHILE;
End;
//

Để hiểu cú pháp trên, chúng ta hãy tạo hai bảng, tức là một bảng có các bản ghi và bảng thứ hai sẽ có các bản ghi từ vòng lặp bằng cách sử dụng các thủ tục được lưu trữ.

Sau đây là truy vấn để tạo bảng đầu tiên -

mysql> create table AllRows
   -> (
   -> Id int,
   -> Name varchar(100)
   -> );
Query OK, 0 rows affected (0.46 sec)

Chèn một số bản ghi trong bảng đầu tiên bằng cách sử dụng lệnh chèn. Truy vấn như sau -

mysql> insert into AllRows values(1,'John');
Query OK, 1 row affected (0.12 sec)

mysql> insert into AllRows values(100,'Carol');
Query OK, 1 row affected (0.13 sec)

mysql> insert into AllRows values(300,'Sam');
Query OK, 1 row affected (0.15 sec)

mysql> insert into AllRows values(400,'Mike');
Query OK, 1 row affected (0.20 sec)

Hiển thị tất cả các bản ghi từ bảng bằng cách sử dụng câu lệnh select. Truy vấn như sau -

mysql> select *from AllRows;

Đầu ra

+------+-------+
| Id   | Name  |
+------+-------+
|    1 | John  |
|  100 | Carol |
|  300 | Sam   |
|  400 | Mike  | 
+------+-------+
4 rows in set (0.00 sec)

Đây là truy vấn để tạo bảng thứ hai. Truy vấn để tạo bảng như sau -

mysql> create table SecondTableRows
   -> (
   -> StudentId int,
   -> StudentName varchar(100)
   -> );
Query OK, 0 rows affected (0.54 sec)

Bây giờ bạn có thể lặp qua tất cả các hàng của bảng bằng thủ tục được lưu trữ. Quy trình được lưu trữ như sau -

mysql> delimiter //
mysql> 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) SELECT (Id) FROM AllRows LIMIT
startRows ,1;
   -> SET startRows= startRows+1;
   -> END WHILE;
   -> End;
   -> //
Query OK, 0 rows affected (0.22 sec)
mysql> delimiter ;

Gọi thủ tục được lưu trữ bằng lệnh CALL. Cú pháp như sau -

CALL yourStoredProcedureName;

Gọi thủ tục được lưu trữ ở trên để lặp qua tất cả các hàng của bảng đầu tiên. Truy vấn như sau -

mysql> call Sp_AllRowsOfATable();
Query OK, 1 row affected (0.61 sec)

Sau khi gọi thủ tục đã lưu trữ, chúng ta hãy kiểm tra xem điều gì đã xảy ra với bảng thứ hai. Truy vấn như sau -

mysql> select StudentId from SecondTableRows;

Đầu ra

+-----------+
| StudentId |
+-----------+
|         1 |
|       100 |
|       300 |
|       400 |
+-----------+
4 rows in set (0.00 sec)