虽然 MySQL 本身并不支持像“for A 中的每条记录”这样的逐行循环语法,但它提供了迭代机制系统地遍历表行。
一种方法是创建一个对各个行进行操作的过程。过程是用户定义的代码块,可以像查询一样执行。下面是一个循环遍历表 A 中的行的 MySQL 过程:
DROP PROCEDURE IF EXISTS ROWPERROW; DELIMITER ;; CREATE PROCEDURE ROWPERROW() BEGIN DECLARE n INT DEFAULT 0; DECLARE i INT DEFAULT 0; SELECT COUNT(*) FROM A INTO n; SET i=0; WHILE i<n DO INSERT INTO B(ID, VAL) SELECT (ID, VAL) FROM A LIMIT i,1; SET i = i + 1; END WHILE; End; ;; DELIMITER ; CALL ROWPERROW();
此过程对表 A 中的行进行计数,然后迭代每一行并将其数据插入表 B 中。
另一种技术是使用游标,它允许您从表中逐行检索数据。与过程相比,游标可以更好地控制行遍历,但也可能更冗长。考虑以下 MySQL 游标示例:
DROP PROCEDURE IF EXISTS cursor_ROWPERROW; DELIMITER ;; CREATE PROCEDURE cursor_ROWPERROW() BEGIN DECLARE done INT DEFAULT FALSE; DECLARE cursor_i CURSOR FOR SELECT ID,VAL FROM A; DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = TRUE; OPEN cursor_i; read_loop: LOOP FETCH cursor_i INTO cursor_ID, cursor_VAL; IF done THEN LEAVE read_loop; END IF; INSERT INTO B(ID, VAL) VALUES(cursor_ID, cursor_VAL); END LOOP; CLOSE cursor_i; END; ;; DELIMITER ; CALL cursor_ROWPERROW();
这里,为表 A 创建并打开了一个游标。 WHILE 循环从游标中获取行并处理它们,直到没有更多的行需要处理。
以上是如何遍历MySQL表中的行?的详细内容。更多信息请关注PHP中文网其他相关文章!