Tengo un INSERT que contiene unos 7000 registros a insertar, en lugar de hacer 7000 INSERTS intenté hacerlo así:
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 originalINSERT 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 originalWarning: mysqli::query
(): MySQL server has gone away
in C:\xampp_new\htdocs\compras_ventas\clases\bd.php
on line
63
Warning: mysqli::query
(): Error reading result
set's header in C:\xampp_new\htdocs\compras_ventas\clases\bd.php on line 63MySQL 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 originalINSERT 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