如何遍歷MySQL表中的行?

Barbara Streisand
發布: 2024-11-13 14:37:02
原創
679 人瀏覽過

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中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板