Как сделать пакетную вставку в MySQL

У меня есть 1-много записей, которые нужно ввести в таблицу. Каков наилучший способ сделать это в запросе? Должен ли я просто создать цикл и вставить одну запись за итерацию? Или есть лучший способ?

Ответ 1

Из руководства MySQL

Операторы INSERT, использующие VALUES синтаксис может вставлять несколько строк. Делать это, включают в себя несколько списков столбцов значения, каждый из которых заключен внутри круглые скобки и разделенные запятыми. Пример:

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

Ответ 2

В большинстве случаев вы не работаете в клиенте 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

Ответ 3

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

Перейдите по адресу: http://dev.mysql.com/doc/refman/5.5/en/insert.html

Ответ 4

Загружать данные infile-запроса намного лучше, но некоторые серверы, такие как godaddy, ограничивают эту опцию на общем хостинге, поэтому осталось только две опции, а затем одна запись вставки на каждой итерации или вставке в пакет, но вставка в пакет имеет свою ограниченность символов, если ваш запрос превышает это количество символов, заданных в mysql, тогда ваш запрос будет разбит, поэтому я предлагаю вставлять данные в куски с пакетной вставкой, это минимизирует количество соединений, установленных с помощью database.best из удачливых парней.