Eu tenho um número muitos de registros que precisam ser inseridos em uma tabela. Qual é a melhor maneira de fazer isso em uma consulta? Devo apenas fazer um loop e inserir um registro por iteração? Ou há um modo melhor?
Eu tenho um número muitos de registros que precisam ser inseridos em uma tabela. Qual é a melhor maneira de fazer isso em uma consulta? Devo apenas fazer um loop e inserir um registro por iteração? Ou há um modo melhor?
Respostas:
Instruções INSERT que usam a sintaxe VALUES podem inserir várias linhas. Para fazer isso, inclua várias listas de valores de coluna, cada uma entre parênteses e separadas por vírgulas. Exemplo:
INSERT INTO tbl_name (a,b,c) VALUES(1,2,3),(4,5,6),(7,8,9);
max_allowed_packet
Na maioria das vezes, você não está trabalhando em um cliente MySQL e deve inserir em lote usando a API apropriada.
Por exemplo, no 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;
Por favor, consulte a documentação do MySQL na declaração INSERT
insert into select from
desempenho? é tão rápido quanto a inserção em massa?
A opção Carregar consulta de infile de dados é uma opção muito melhor, mas alguns servidores, como godaddy, restringem essa opção em hospedagem compartilhada, portanto, apenas duas opções são deixadas e uma é inserir registro em todas as iterações ou inserções em lote, mas a inserção em lote tem sua limitação de caracteres se sua consulta exceder esse valor. número de caracteres definido no mysql, então sua consulta falhará, então sugiro inserir dados em pedaços com inserção em lote, isso minimizará o número de conexões estabelecidas com o banco de dados.
LOAD DATA LOCAL INFILE '/users/name/txt.file'
O mysql permite que você insira várias linhas ao mesmo tempo INSERIR o manual
INSERT
suporta isso nativamente !