У меня есть одно-много записей, которые нужно ввести в таблицу. Как лучше всего сделать это в запросе? Должен ли я просто сделать цикл и вставлять по одной записи на итерацию? Или есть способ лучше?
У меня есть одно-много записей, которые нужно ввести в таблицу. Как лучше всего сделать это в запросе? Должен ли я просто сделать цикл и вставлять по одной записи на итерацию? Или есть способ лучше?
Ответы:
Из руководства MySQL
Операторы INSERT, использующие синтаксис VALUES, могут вставлять несколько строк. Для этого включите несколько списков значений столбцов, каждый из которых заключен в круглые скобки и разделен запятыми. Пример:
INSERT INTO tbl_name (a,b,c) VALUES(1,2,3),(4,5,6),(7,8,9);
max_allowed_packet
В большинстве случаев вы не работаете в клиенте 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();
Insert into table(col1,col2) select col1,col2 from table_2;
insert into select from
производительности? это так же быстро, как объемная вставка?
Запрос загрузки данных в файл - намного лучший вариант, но некоторые серверы, такие как godaddy, ограничивают эту опцию на общем хостинге, поэтому осталось только два варианта, затем одна - вставка записи на каждой итерации или пакетной вставке, но пакетная вставка имеет ограничение на количество символов, если ваш запрос превышает это количество символов, установленных в mysql, тогда ваш запрос выйдет из строя, поэтому я предлагаю вставлять данные в блоки с помощью пакетной вставки, это минимизирует количество подключений, установленных с базой данных. удачи, ребята
LOAD DATA LOCAL INFILE '/users/name/txt.file'
mysql позволяет вставлять сразу несколько строк INSERT manual
INSERT
поддерживает это изначально !