Ver Mensaje Individual
  #1 (permalink)  
Antiguo 19/12/2012, 09:20
alyciashape
 
Fecha de Ingreso: abril-2012
Mensajes: 590
Antigüedad: 12 años
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