Tengo 1-muchos número de registros que deben ingresarse en una tabla. ¿Cuál es la mejor manera de hacer esto en una consulta? ¿Debo hacer un bucle e insertar un registro por iteración? ¿O hay un mejor camino?
Si tiene una gran cantidad de registros y podría formatearlos como un archivo CSV, consulte la instrucción LOAD DATA INFILE o el comando mysqlimport.
squawknull
Para el registro, LOAD DATA es un comando muy flexible que no requiere entrada CSV; cualquier formato de texto servirá, y hay una serie de parámetros útiles para analizar y manipular datos de entrada. Esta es definitivamente la forma más rápida de cargar datos en una base de datos local. No está claro qué se entiende por "mejor" arriba: es decir, si la simplicidad (use las instrucciones INSERT) supera la velocidad (use LOAD DATA).
Las instrucciones INSERT que usan la sintaxis VALUES pueden insertar varias filas. Para hacer esto, incluya múltiples listas de valores de columna, cada una encerrada entre paréntesis y separadas por comas. Ejemplo:
¿Cuál es la sintaxis para escribir esta declaración de inserción en el procedimiento almacenado?
Nitin Sawant
@Nitin, ¿no sería la misma sintaxis .. ??? Eso es lo que haría en SQL Server de todos modos.
Anuncios del
13
Tenga en cuenta que aunque la pregunta está etiquetada "Cómo hacer inserciones por lotes ", esta respuesta es en realidad una inserción masiva . Bulk suele ser más rápido, vea esta pregunta
¿ insert into select from Qué tal el rendimiento? ¿Es tan rápido como el inserto a granel?
autopista
6
La consulta de carga de archivos de datos es una opción mucho mejor, pero algunos servidores como GoDaddy restringen esta opción en el alojamiento compartido, por lo tanto, solo quedan dos opciones, luego una es insertar registro en cada iteración o inserción por lotes, pero la inserción por lotes tiene su limitación de caracteres si su consulta excede esto número de caracteres establecidos en mysql, entonces su consulta se bloqueará, por lo que sugiero insertar datos en fragmentos con inserción por lotes, esto minimizará el número de conexiones establecidas con la base de datos.
INSERT
apoya esto de forma nativa !Respuestas:
Del manual de MySQL
fuente
max_allowed_packet
La mayoría de las veces, no está trabajando en un cliente MySQL y debe insertar lotes por lotes utilizando la API adecuada.
Por ejemplo, en JDBC:
http://publib.boulder.ibm.com/infocenter/db2luw/v8/index.jsp?topic=/com.ibm.db2.udb.doc/ad/tjvbtupd.htm
fuente
Consulte la documentación de MySQL en la declaración INSERT
fuente
insert into select from
Qué tal el rendimiento? ¿Es tan rápido como el inserto a granel?La consulta de carga de archivos de datos es una opción mucho mejor, pero algunos servidores como GoDaddy restringen esta opción en el alojamiento compartido, por lo tanto, solo quedan dos opciones, luego una es insertar registro en cada iteración o inserción por lotes, pero la inserción por lotes tiene su limitación de caracteres si su consulta excede esto número de caracteres establecidos en mysql, entonces su consulta se bloqueará, por lo que sugiero insertar datos en fragmentos con inserción por lotes, esto minimizará el número de conexiones establecidas con la base de datos.
fuente
LOAD DATA LOCAL INFILE '/users/name/txt.file'
mysql le permite insertar múltiples filas a la vez INSERTAR manual
fuente