MySQL 如何在MySQL中循环遍历表的所有行?
要循环遍历表的所有行,可以在MySQL中使用存储过程。语法如下 −
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;
//
要理解上述语法,让我们创建两个表,即一个有记录,另一个将使用存储过程从循环中获取记录。
以下是创建第一个表的查询语句 −
mysql> create table AllRows
-> (
-> Id int,
-> Name varchar(100)
-> );
Query OK,0行受影响(0.46秒)
使用插入命令在第一个表中插入一些记录。查询语句如下 −
mysql> insert into AllRows values(1,'John');
Query OK,1行受影响(0.12秒)
mysql> insert into AllRows values(100,'Carol');
Query OK,1行受影响(0.13秒)
mysql> insert into AllRows values(300,'Sam');
Query OK,1行受影响(0.15秒)
mysql> insert into AllRows values(400,'Mike');
Query OK,1行受影响(0.20秒)
使用select语句显示表中的所有记录。查询语句如下 −
mysql> select *from AllRows;
阅读更多:MySQL 教程
输出
+------+-------+
| Id | Name |
+------+-------+
| 1 | John |
| 100 | Carol |
| 300 | Sam |
| 400 | Mike |
+------+-------+
4行受影响(0.00秒)
以下是创建第二个表的查询语句。创建表的查询语句如下 −
mysql> create table SecondTableRows
-> (
-> StudentId int,
-> StudentName varchar(100)
-> );
Query OK, 0 rows affected (0.54 sec)
现在,您可以使用存储过程循环遍历表的所有行。存储过程如下 −
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 ;
使用CALL命令调用存储过程。语法如下 −
CALL yourStoredProcedureName;
调用上述存储过程以循环遍历第一个表的所有行。查询语句如下 −
mysql> call Sp_AllRowsOfATable();
Query OK,1行受影响(0.61秒)
调用存储过程后,让我们检查第二个表发生了什么。查询语句如下 −
mysql> select StudentId from SecondTableRows;
输出
+-----------+
| StudentId |
+-----------+
| 1 |
| 100 |
| 300 |
| 400 |
+-----------+
4行受影响(0.00秒)