ホームページ  >  記事  >  データベース  >  MySQL テーブルの行をループする方法: プロシージャとカーソル?

MySQL テーブルの行をループする方法: プロシージャとカーソル?

DDD
DDDオリジナル
2024-11-12 14:21:02930ブラウズ

How to Loop Through Rows in a MySQL Table: Procedures vs. Cursors?

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

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。