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?
Se você tiver um número realmente grande de registros e puder formatá-los como um arquivo CSV, consulte a instrução LOAD DATA INFILE ou o comando mysqlimport.
Squawknull
Para o registro, LOAD DATA é um comando muito flexível que não requer entrada CSV; qualquer formato de texto serve, e há vários parâmetros úteis para analisar e manipular dados de entrada. Esta é definitivamente a maneira mais rápida de carregar dados em um banco de dados local. Não está claro o que se entende por "melhor" acima: por exemplo, se a simplicidade (use instruções INSERT) supera a velocidade (use LOAD DATA).
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:
qual é a sintaxe para escrever esta instrução de inserção no procedimento armazenado?
Nitin Sawant
@ Nitin não seria a mesma sintaxe .. ??? É o que eu faria no SQL Server de qualquer maneira.
Anúncios
13
Observe que, enquanto a pergunta está rotulada como "Como inserir inserções em lote ", esta resposta é na verdade inserção em massa . Granel é geralmente mais rápido, consulte esta pergunta
e quanto ao insert into select from desempenho? é tão rápido quanto a inserção em massa?
hiway 30/01
6
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.
INSERT
suporta isso nativamente !Respostas:
No manual do MySQL
fonte
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:
http://publib.boulder.ibm.com/infocenter/db2luw/v8/index.jsp?topic=/com.ibm.db2.udb.doc/ad/tjvbtupd.htm
fonte
Por favor, consulte a documentação do MySQL na declaração INSERT
fonte
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.
fonte
LOAD DATA LOCAL INFILE '/users/name/txt.file'
O mysql permite que você insira várias linhas ao mesmo tempo INSERIR o manual
fonte