sql >> Databasteknik >  >> RDS >> Mysql

Är det möjligt att göra masskopiering i mysql

Du kan infoga flera rader med en enda SQL-sats så här:

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

Uppdatering:

MarkR har rätt i sin kommentar - om du samlar in data från en användare, eller om du sammanställer information, kan du bygga frågan dynamiskt med något som:

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

Två viktiga punkter att notera:

  1. Om du accepterar input från en användare är det mycket viktigt för att rensa alla användarinmatningar, annars kan skadliga användare ändra/ta bort/släppa hela din databas. För mer information, googla "SQL-injektioner."
  2. Jag använder StringBuilder-klassen istället för att använda en primitiv sträng och helt enkelt lägga till (dvs. string s ="Infoga..."; s+="bla bla bla") eftersom det är StringBuilder som är snabbare att lägga till, eftersom den behandlas inte som en array och behöver därför inte ändra storlek på sig själv när du lägger till den.


  1. Använda Oracle JDeveloper 12c med Oracle Database 12c på Oracle Cloud Platform, del 3

  2. Hur går man med i kategoritabell för föräldrar i SQL-fråga?

  3. SQL Developer-skriptutgång trunkerar sys_refcursor-bredden

  4. Hur man tar reda på platsen för för närvarande använda MySQL-konfigurationsfil i linux