sql >> Base de Datos >  >> RDS >> Mysql

¿Es posible hacer una copia masiva en mysql?

Puede insertar varias filas usando una sola instrucción SQL así:

INSERT INTO myTable (col1, col2, col3) VALUES ('myval1', 'myval2', 'myval3'), ('myotherval1', 'myotherval2', 'myotherval3'), ('anotherval1', 'anotherval2', 'anotherval3');

Actualización:

MarkR tiene razón en su comentario:si está recopilando datos de un usuario o está recopilando información, puede crear la consulta dinámicamente con algo como:

StringBuilder stringBuilder = new StringBuilder();
stringBuilder.Append("INSERT INTO myTable (col1, col2, col3) VALUES ");
for(int i=0;i<myDataCollection.Count;i++) {
  stringBuilder.Append("(" + myDataCollection[i].Col1 + ", " + myDataCollection[i].Col2 + ", " + myDataCollection[i].Col3 + ")");
  if (i<myDataCollection.Count-1) {
    stringBuilder.Append(", ");
  } else {
    stringBuilder.Append(";");
  }
}

string insertStatement = stringBuilder.ToString();

Dos puntos importantes a tener en cuenta:

  1. Si está aceptando la entrada de un usuario, es muy importante para desinfectar todas las entradas de los usuarios, de lo contrario, los usuarios maliciosos podrían modificar/eliminar/eliminar toda su base de datos. Para obtener más información, busque en Google "Inyecciones de SQL".
  2. Estoy usando la clase StringBuilder, en lugar de usar una cadena primitiva y simplemente agregar (es decir, string s ="Insertar..."; s+="bla, bla, bla") porque StringBuilder es más rápido para agregar, porque no se trata como una matriz y, por lo tanto, no necesita cambiar su tamaño a medida que lo agrega.