Mysql
 sql >> Database >  >> RDS >> Mysql

È possibile eseguire una copia di massa in MySQL

Puoi inserire più righe utilizzando una singola istruzione SQL in questo modo:

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

Aggiornamento:

MarkR ha ragione nel suo commento:se stai raccogliendo dati da un utente o stai compilando informazioni, puoi creare la query in modo dinamico con qualcosa come:

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();

Due punti importanti da notare:

  1. Se accetti l'input di un utente, è molto importante per disinfettare tutti gli input degli utenti, altrimenti gli utenti malintenzionati potrebbero modificare/eliminare/eliminare l'intero database. Per ulteriori informazioni, cerca su Google "Iniezioni SQL".
  2. Sto usando la classe StringBuilder, piuttosto che usare una primitiva di stringa e semplicemente aggiungere (es. string s ="Insert..."; s+="blah blah blah") perché StringBuilder è più veloce nell'aggiungere, perché non viene trattato come un array, quindi non ha bisogno di ridimensionarsi quando lo aggiungi.