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 中国語 Web サイトの他の関連記事を参照してください。