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?
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?
Respuestas:
Del manual de MySQL
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:
INSERT INTO tbl_name (a,b,c) VALUES(1,2,3),(4,5,6),(7,8,9);
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:
connection con.setAutoCommit(false);
PreparedStatement prepStmt = con.prepareStatement("UPDATE DEPT SET MGRNO=? WHERE DEPTNO=?");
prepStmt.setString(1,mgrnum1);
prepStmt.setString(2,deptnum1);
prepStmt.addBatch();
prepStmt.setString(1,mgrnum2);
prepStmt.setString(2,deptnum2);
prepStmt.addBatch();
int [] numUpdates=prepStmt.executeBatch();
Insert into table(col1,col2) select col1,col2 from table_2;
Consulte la documentación de MySQL en la declaración INSERT
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.
LOAD DATA LOCAL INFILE '/users/name/txt.file'
mysql le permite insertar múltiples filas a la vez INSERTAR manual
INSERT
apoya esto de forma nativa !