Ir para o conteúdo
[gato]

[Resolvido] Insert de uma query com centenas de linhas

Mensagens Recomendadas

[gato]    0
[gato]

Boa tarde pessoal

Já ando por aqui há algum tempo mas não costumo postar, se calhar porque me respondem às dúvidas antes de as fazer :P

Mas neste caso ainda tenho dúvidas :)

Ora bem, estou a desenvolver uma aplicação web (php) que numa das suas componentes pega num ficheiro .txt, faz o seu parsing e é suposto inserir numa base de dados (mysql) esses valores.

O problema é que esses ficheiros normalmente têm milhares de linhas, correspondendo cada linha a uma nova linha numa tabela da base de dados.

A minha pergunta é se posso fazer só um insert na base de dados com esses valores todos, do tipo:

insert into tabela values

( . . .),

( . . .),

( . . .),

( . . .);

tentei fazer isso mas quando faço a query dá-me o erro "server has gone away"

Por enquanto tenho um insert para cada linha, mas queria evitar isso ao máximo devido à performance.

Cumprimentos,

Nuno Gato

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
djthyrax    11
djthyrax

Não percebi...

Experimenta esta query:

INSERT INTO tabela (campo1, campo2) VALUES
('lolz', 'lawl'),
('lulz', 'lowl')

Se não dá, não percebo porquê...

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
[gato]    0
[gato]

dar dá, mas só se tiver algumas centenas de linhas.

se tiver milhares (como é o mais normal) já não dá e dá erro "MySQL server has gone away" é tipo timeout do server.

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
[gato]    0
[gato]

You can also get these errors if you send a query to the server that is incorrect or too large. If mysqld receives a packet that is too large or out of order, it assumes that something has gone wrong with the client and closes the connection. If you need big queries (for example, if you are working with big BLOB columns), you can increase the query limit by setting the server's max_allowed_packet variable, which has a default value of 1MB. You may also need to increase the maximum packet size on the client end. More information on setting the packet size is given in Section B.1.2.9, “Packet too large”.

An INSERT or REPLACE statement that inserts a great many rows can also cause these sorts of errors. Either one of these statements sends a single request to the server irrespective of the number of rows to be inserted; thus, you can often avoid the error by reducing the number of rows sent per INSERT or REPLACE.

É mesmo uma restrição do MySQL :P dizem para fazer insert's mais pequenos

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!

Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.

Entrar Agora


×

Aviso Sobre Cookies

Ao usar este site você aceita os nossos Termos de Uso e Política de Privacidade