MySQL テーブルの行を走査するにはどうすればよいですか?

Barbara Streisand
リリース: 2024-11-13 14:37:02
オリジナル
678 人が閲覧しました

How do I Traverse Rows in MySQL Tables?

MySQL テーブル内の行の走査

MySQL は、「A のレコードごとに」のような行ごとのループ構文をネイティブにサポートしていませんが、反復するメカニズムを提供しています。テーブルの行を系統的に調べます。

使用プロシージャ

1 つのアプローチは、個々の行を操作するプロシージャを作成することです。プロシージャは、クエリのように実行できるユーザー定義のコード ブロックです。以下はテーブル 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 に挿入します。

使用カーソル

もう 1 つの手法はカーソルを使用することです。これを使用すると、テーブルから行ごとにデータを取得できます。カーソルはプロシージャよりも行トラバースをより詳細に制御できますが、より冗長になることもあります。次の 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 中国語 Web サイトの他の関連記事を参照してください。

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