首页  >  文章  >  数据库  >  如何遍历MySQL表中的行?

如何遍历MySQL表中的行?

Barbara Streisand
Barbara Streisand原创
2024-11-13 14:37:02638浏览

How do I Traverse Rows in MySQL Tables?

遍历 MySQL 表中的行

虽然 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中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn