Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » Mysql »

Hacer un insert muy grande

Estas en el tema de Hacer un insert muy grande en el foro de Mysql en Foros del Web. Tengo un INSERT que contiene unos 7000 registros a insertar, en lugar de hacer 7000 INSERTS intenté hacerlo así: @import url("http://static.forosdelweb.com/clientscript/vbulletin_css/geshi.css"); Código MySQL: Ver original ...
  #1 (permalink)  
Antiguo 19/12/2012, 09:20
 
Fecha de Ingreso: abril-2012
Mensajes: 590
Antigüedad: 12 años, 7 meses
Puntos: 58
Hacer un insert muy grande

Tengo un INSERT que contiene unos 7000 registros a insertar, en lugar de hacer 7000 INSERTS intenté hacerlo así:

Código MySQL:
Ver original
  1. INSERT INTO tabla (campo1, campo2) VALUES (valor1, valor2), (valor3, valor4), (valor5, valor6)

Ya lo hice con anterioridad con muy buenos resultados.

El caso es que este otro sql, que es bastante similar, no funciona. Es así:
Código MySQL:
Ver original
  1. INSERT INTO venta (claart, claemp, cantidad, media, fecha) VALUES (1, 2, 0, 20, '2012-12-19 15:57:38'), (1, 5, 39, 20, '2012-12-19 15:57:38')

Etc.

De hecho tengo un script que inserta 7000 registros también en un segundo más o menos, en un sólo insert. Sin embargo en este caso no funciona. Me suelta el siguiente error:
Código MySQL:
Ver original
  1. Warning: mysqli::query(): MySQL server has gone away in C:\xampp_new\htdocs\compras_ventas\clases\bd.php on line 63
  2.  
  3. Warning: mysqli::query(): Error reading result set's header in C:\xampp_new\htdocs\compras_ventas\clases\bd.php on line 63
  4. MySQL server has gone away63

Es la línea que hace la inserción.

De momento lo arreglé haciendolo cada 1000 registros, pero no se, me extraña porque con el otro si lo hace correctamente, cuya estructura es así:
Código MySQL:
Ver original
  1. INSERT INTO articulo (claart, codigo, nombre, s_urbarrio, s_alm_temp_camion, s_dresden, s_consignia, s_alcabre_moto, s_motoexpress, s_perdidas, s_alcabre_urba, s_dot) VALUES (1, '0699500', 'PI. MT18 100/100-18 NHS R TT', 2, 0, 0, 0, 0, -2, 0, 0, 0),(6, '0699400', 'PI. MT320 110/100-18 NHS', 0, 0, 0, 0, 0, 0, 0, 0, 0)

No sé por qué este segundo si lo hace y además perfectamente y el otro no. Cuando, ahora que veo, tiene mucha más información. Será por las fechas que le cuestan mas procesarlas?

¿Hay algo así como LOAD DATA INFILE para hacer inserts?

También he leído esto en la documentación pero no me queda muy claro de para qué sirve:
http://dev.mysql.com/doc/refman/5.0/en/lock-tables.html

Aconseja bloquear la tabla mientras haces los insert. Pero no se si eso implica que tengo que lanzar todos individualmente o que puedo hacer uno grande
  #2 (permalink)  
Antiguo 29/12/2012, 16:56
 
Fecha de Ingreso: junio-2011
Mensajes: 139
Antigüedad: 13 años, 5 meses
Puntos: 42
Respuesta: Hacer un insert muy grande

Hola alyciashape,

Desconozco la versión de MySQL usada, pero veo que tienes un enlace a la versión 5.0, por ello hago referencia a dicha versión.

Puedes leer la siguiente sección de la documentación: C.5.2.10. Packet too large, es posible que aumentando el valor de la variable max_allowed_packet soluciones el problema.

Espero te sea útil.

Etiquetas: grande, insert, php, registros, resultados, sql, tabla, campos
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 03:21.