ホームページ >データベース >mysql チュートリアル >MySQL への一括挿入後に自動インクリメント ID を効率的に取得するにはどうすればよいですか?

MySQL への一括挿入後に自動インクリメント ID を効率的に取得するにはどうすればよいですか?

DDD
DDDオリジナル
2024-12-01 19:22:10453ブラウズ

How to Efficiently Retrieve Auto-Increment IDs After Bulk Inserts in MySQL?

MySQL での一括挿入からの自動インクリメント ID の取得

データベース管理における一般的なタスクの 1 つは、テーブルに複数の行を挿入し、各行に対して生成された自動インクリメント ID を取得します。最後に挿入された ID を取得するのは LAST_INSERT_ID() 関数を使用すると簡単ですが、一括挿入では、生成されたすべての ID の配列を取得することが困難になります。

従来の方法: 一時テーブルを介した挿入

以前は、新しい ID を一時テーブルに挿入し、サブクエリを使用してそれらを取得するのが一般的な手法でした。ただし、このアプローチには追加の手順が必要であり、パフォーマンスのオーバーヘッドが生じます。

InnoDB での LAST_INSERT_ID() および ROW_COUNT() の使用

MySQL の最新バージョン、特に InnoDB を使用するバージョンストレージ エンジンでは、一括挿入 ID を取得するための代替方法を提供します。このメソッドは、LAST_INSERT_ID() 関数と ROW_COUNT() を利用して、割り当てられた自動インクリメント値の範囲を抽出します。

手順:

  1. innodb_autoinc_lock_mode を構成します。システム変数を 0 (従来型) または 1 に設定します。 (連続した)。これにより、一括挿入に対して自動インクリメント値が順番に割り当てられるようになります。
  2. 一括挿入ステートメントを実行します。
  3. LAST_INSERT_ID() から最初の ID を取得します。
  4. 最後の ID を計算します。最初に ROW_COUNT() - 1 を加算した ID ID.

例:

INSERT INTO `my_table` (`name`, `email`) VALUES
('John Doe', 'john.doe@example.com'),
('Jane Doe', 'jane.doe@example.com'),
('Peter Jones', 'peter.jones@example.com');

SET @first_id = LAST_INSERT_ID();
SET @last_id = @first_id + ROW_COUNT() - 1;

SELECT * FROM `my_table` WHERE `id` BETWEEN @first_id AND @last_id;

利点:

  • 一時的なしテーブル: 追加の挿入とサブクエリの必要性を排除します。
  • パフォーマンスの向上: 一括挿入 ID をより効率的に取得する方法を提供します。
  • InnoDB との互換性: InnoDB の機能を利用します。ストレージ エンジンにより、一括挿入中に連続した ID 割り当てが保証されます。

以上がMySQL への一括挿入後に自動インクリメント ID を効率的に取得するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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