Как сделать пакетную вставку в MySQL
У меня есть 1-много записей, которые нужно внести в таблицу. Каков наилучший способ сделать это в запросе? Должен ли я просто сделать цикл и вставить одну запись за итерацию? Или есть лучший способ?
6 ответов
Из руководства MySQL
Операторы INSERT, использующие синтаксис VALUES, могут вставлять несколько строк. Для этого включите несколько списков значений столбцов, каждый из которых заключен в скобки и разделен запятыми. Пример:
INSERT INTO tbl_name (a,b,c) VALUES(1,2,3),(4,5,6),(7,8,9);
Большую часть времени вы не работаете в клиенте 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();
Запрос на загрузку данных гораздо лучше, но некоторые серверы, такие как godaddy, ограничивают этот параметр на общем хостинге, поэтому остается только два варианта, а затем вставлять запись на каждую итерацию или пакетную вставку, но пакетная вставка имеет ограничение символов, если ваш запрос превышает этот количество символов, установленное в mysql, тогда ваш запрос потерпит крах, поэтому я предлагаю вставить данные в чанки с помощью пакетной вставки, это сведет к минимуму количество соединений, установленных с базой данных.
Insert into table(col1,col2) select col1,col2 from table_2;
Пожалуйста, перейдите по адресу:http://dev.mysql.com/doc/refman/5.5/en/insert.html
mysql позволяет вставлять несколько строк одновременно. INSERT manual
ВСТАВЬТЕ В test_1 VALUES(24, 'B', '1990-12-07'), (25, 'C', '1990-12-08');