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