web-dev-qa-db-fra.com

Comment faire une insertion par lot dans MySQL

J'ai un nombre multiple d'enregistrements qui doivent être entrés dans une table. Quelle est la meilleure façon de faire cela dans une requête? Devrais-je simplement faire une boucle et insérer un enregistrement par itération? Ou y a-t-il un meilleur moyen?

120
Genadinik

Depuis le manuel MySQL

Les instructions INSERT utilisant la syntaxe VALUES peuvent insérer plusieurs lignes. Pour ce faire, incluez plusieurs listes de valeurs de colonnes, chacune entourée de parenthèses et séparée par des virgules. Exemple:

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

La plupart du temps, vous ne travaillez pas dans un client MySQL et vous devez regrouper les insertions par lots en utilisant l'API appropriée.

Par exemple. dans 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;

S'il vous plaît aller à: http: //dev.mysql.com/doc/refman/5.5/en/insert.html

6
janwen

Charger une requête infile de données est une option bien meilleure, mais certains serveurs comme godaddy limitent cette option à un hébergement partagé. Il ne reste donc que deux options, à savoir insérer un enregistrement à chaque itération ou insertion de lot. nombre de caractères définis dans mysql, votre requête se bloquera. Je suggère donc d’insérer des données dans des morceaux avec une insertion par lot, cela minimisera le nombre de connexions établies avec database.best of luck guys

5

mysql vous permet d'insérer plusieurs lignes à la fois INSERT manual

3
bensiu