プロシージャを使用せずに MySQL テーブル内の行を反復処理するにはどうすればよいですか?

Mary-Kate Olsen
リリース: 2024-11-12 17:20:02
オリジナル
994 人が閲覧しました

How Can I Iterate Through Rows in a MySQL Table Without Using Procedures?

MySQL テーブルの行のループ

MySQL テーブルの各行の繰り返しは、データ処理における一般的な操作です。 「A のレコードごと」のような概念は他のコンテキストにも存在しますが、MySQL は別のアプローチに従います。

ループを使用して行を変換および更新する

複雑な操作を実行するには別のテーブルへのデータの挿入やフィールド値の更新など、個々の行に対して、ループベースのアプローチを利用できます。プロシージャは実行可能なオプションですが、このガイドではプロシージャを必要としないソリューションに焦点を当てます。

シナリオ例

テーブル A と B があるシナリオを考えてみましょう。 、それぞれに ID フィールドと VAL フィールドがあります。ループのようなプロセスを使用して、A の内容を B にコピーすることを目的としています。

プロシージャ

  1. プロシージャの作成:質問はプロシージャを避けることを示唆していますが、プロシージャはテーブルの行を反復処理する便利な方法を提供します。次のように ROWPERROW というプロシージャを作成できます:
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;
ログイン後にコピー
  1. 区切り文字を設定して実行: SQL が各行を個別に実行しないように区切り文字を変更します:
DELIMITER ;;
CALL ROWPERROW();
DELIMITER ;
ログイン後にコピー

代替アプローチ

ループは行を反復処理する簡単な方法を提供しますが、代替アプローチも存在します。

  1. セットベースのクエリ: 可能であれば、複数の行を同時に操作するセットベースのクエリを使用する方が効率的です。
  2. カーソル: カーソルを使用すると明示的な行ナビゲーションが可能になりますが、パフォーマンスが低下し、正しく書くのが難しくなる可能性があります。

最終的に、最適なアプローチは、当面の特定のタスクとパフォーマンスの考慮事項によって異なります。

以上がプロシージャを使用せずに MySQL テーブル内の行を反復処理するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート