web-dev-qa-db-ja.com

MySQLでバッチ挿入を行う方法

テーブルに入力する必要のあるレコードが1つ多くあります。クエリでこれを行う最良の方法は何ですか?ループを作成し、反復ごとに1つのレコードを挿入する必要がありますか?または、より良い方法がありますか?

118
Genadinik

MySQLマニュアル から

VALUES構文を使用するINSERTステートメントは、複数の行を挿入できます。これを行うには、それぞれが括弧で囲まれ、コンマで区切られた列値の複数のリストを含めます。例:

INSERT INTO tbl_name (a,b,c) VALUES(1,2,3),(4,5,6),(7,8,9);
263
nietaki

ほとんどの場合、MySQLクライアントで作業しているわけではないため、適切なAPIを使用して挿入をまとめてバッチ処理する必要があります。

例えば。 JDBCの場合:

connection con.setAutoCommit(false); 
PreparedStatement prepStmt = con.prepareStatement("UPDATE DEPT SET MGRNO=? WHERE DEPTNO=?");
prepStmt.setString(1,mgrnum1);                 
prepStmt.setString(2,deptnum1);
prepStmt.addBatch();

prepStmt.setString(1,mgrnum2);                        
prepStmt.setString(2,deptnum2);
prepStmt.addBatch();

int [] numUpdates=prepStmt.executeBatch();

http://publib.boulder.ibm.com/infocenter/db2luw/v8/index.jsp?topic=/com.ibm.db2.udb.doc/ad/tjvbtupd.htm

22
Kamran
Insert into table(col1,col2) select col1,col2 from table_2;

以下にアクセスしてください:http://dev.mysql.com/doc/refman/5.5/en/insert.html

6
janwen

ロードデータインファイルクエリははるかに優れたオプションですが、GoDaddyなどの一部のサーバーは共有ホスティングでこのオプションを制限するため、2つのオプションのみが残り、1つはすべての反復またはバッチ挿入でレコードを挿入しますが、クエリがこれを超える場合、バッチ挿入には文字の制限がありますmysqlに設定されている文字数が多いとクエリがクラッシュします。したがって、バッチ挿入でチャンクにデータを挿入することをお勧めします。これにより、データベースとの接続数を最小限に抑えることができます。

mysqlでは、複数の行を一度に挿入できます INSERT manual

3
bensiu