MySQLで複数のレコードをすばやく一括挿入するクエリの書き方
MySQLで複数のレコードを効率よく挿入したい場合、INSERT文を何度も実行するのではなく、1つのINSERT文で複数行をまとめて指定するのがおすすめです。この方法ならデータベースとの通信回数が減り、処理速度が大幅に向上します。
基本構文
複数のレコードをすばやく挿入するには、単一のINSERT文を使い、以下の構文に従います。
insert into yourTableName values(yourValue1,yourValue2,...N),(yourValue1,yourValue2,...N).....N;
ポイントは、各行の値セットをカンマ(,)で区切って並べるだけというシンプルさです。VALUES句の後ろに、挿入したい行の分だけ「(値1, 値2, ...)」を続けて記述します。
サンプルテーブルの作成
それでは、実際の動きを確認してみましょう。まずはテーブルを作成します。
mysql> create table DemoTable2007
(
Amount1 int,
Amount2 int,
Amount3 int
);
Query OK, 0 rows affected (1.36 sec)
3つのINT型カラムを持つシンプルなテーブル「DemoTable2007」が作成できました。
複数レコードの一括挿入
次に、INSERTコマンドを使って5件のレコードを一度に挿入します。
mysql> insert into DemoTable2007 values(450,600,700),(1000,200,3000),
(800,900,1200),(1300,1500,2000),(40000,50000,6700);
Query OK, 5 rows affected (0.11 sec)
Records: 5 Duplicates: 0 Warnings: 0
「Records: 5」と表示されているように、たった1回のSQL実行で5件すべてが登録されました。実行時間もわずか0.11秒です。もし1行ずつ個別にINSERT文を実行していたら、その分だけ時間とリソースがかかります。
挿入結果の確認
SELECT文でテーブルの中身を確認してみましょう。
mysql> select * from DemoTable2007;
このクエリを実行すると、以下のような出力が得られます。
+---------+---------+---------+ | Amount1 | Amount2 | Amount3 | +---------+---------+---------+ | 450 | 600 | 700 | | 1000 | 200 | 3000 | | 800 | 900 | 1200 | | 1300 | 1500 | 2000 | | 40000 | 50000 | 6700 | +---------+---------+---------+ 5 rows in set (0.00 sec)
5件のレコードが正しく挿入されていることが確認できました。
まとめ
複数行INSERTを使えば、アプリケーションとデータベース間のやり取りを最小限に抑えられます。大量データの初期投入やバッチ処理などでは特に効果が大きいので、ぜひ活用してください。なお、非常に大量の行を挿入する場合は、max_allowed_packetの設定やトランザクションの活用もあわせて検討するとよいでしょう。
-
MySQLのINSERT INTO SELECT文で複数のテーブルからレコードを挿入する方法
複数のテーブルからレコードを挿入するには、INSERT INTO ... SELECT 文を使用します。この記事では、2つのテーブルのデータを組み合わせて、別のテーブルへレコードを挿入する手順を、実際の実行例とともに解説します。 1つ目のテーブルを作成する まず、挿入元となる1つ目のテーブルを作成しましょう。 mysql> create table DemoTable1943 ( Name varchar(20) ); Query OK, 0 rows affected (0.00 sec) サンプルデータを挿入する INSERTコマンドを使って、テーブルにレコー
-
MySQLで1つのINSERT文を使って列に複数の値を一括挿入する方法
はじめにMySQLでは、1つのINSERT文を繰り返し実行しなくても、単一のクエリだけで同じ列に複数の値を挿入できます。VALUES句の後ろに、挿入したい値をカンマ区切りのタプル(行)として列挙するだけです。この方法はデータベースへの接続回数を減らせるため、大量のデータを登録する際にパフォーマンス面でも大きなメリットがあります。基本構文複数の値を1つの列に挿入する場合の基本構文は以下のとおりです。INSERT INTO テーブル名 VALUES(値1),(値2),...,(値N);このように、各値を丸括弧で囲み、カンマ(,)で区切って並べることで、1回のクエリで複数行をまとめて挿入できます。実