循環遍歷 MySQL 表中的行
在 MySQL 中,循環遍歷表的行可以使用過程或基於遊標來實現方法。本文基於涉及將資料從表 A 複製到表 B 的特定場景來探討這兩種方法。
基於過程的方法
過程封裝了一組操作,可以迭代表的行。以下是一個範例流程:
DELIMITER ;; CREATE PROCEDURE ROWPERROW() BEGIN DECLARE n INT DEFAULT 0; DECLARE i INT DEFAULT 0; SELECT COUNT(*) FROM table_A INTO n; SET i=0; WHILE i<n DO INSERT INTO table_B(ID, VAL) SELECT ID, VAL FROM table_A LIMIT i,1; SET i = i + 1; END WHILE; END; ;;
建立流程後,您可以使用 CALL ROWPERROW(); 來執行它。
基於遊標的方法
遊標允許迭代查詢傳回的一組行。這是基於遊標的方法:
DELIMITER ;; CREATE PROCEDURE cursor_ROWPERROW() BEGIN DECLARE cursor_ID INT; DECLARE cursor_VAL VARCHAR; DECLARE done INT DEFAULT FALSE; DECLARE cursor_i CURSOR FOR SELECT ID,VAL FROM table_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 table_B(ID, VAL) VALUES(cursor_ID, cursor_VAL); END LOOP; CLOSE cursor_i; END; ;;
記住使用適當的資料類型宣告變數並處理任何錯誤或異常。
注意事項
基於過程和基於遊標的方法都可以用於循環遍歷表行。然而,基於過程的方法不如遊標靈活。遊標允許更複雜的操作,例如一次更新多行。
出於效能原因,基於集合的查詢通常優於循環機制。然而,對於複雜的任務或需要即時更新的場景,可能需要循環方法。
以上是如何循環遍歷 MySQL 表中的行:過程與遊標?的詳細內容。更多資訊請關注PHP中文網其他相關文章!