Mysql
 sql >> Base de données >  >> RDS >> Mysql

Est-ce possible de faire une copie en bloc dans mysql

Vous pouvez insérer plusieurs lignes à l'aide d'une seule instruction SQL comme suit :

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

Mise à jour :

MarkR a raison dans son commentaire - si vous collectez des données auprès d'un utilisateur ou si vous compilez des informations, vous pouvez créer la requête dynamiquement avec quelque chose comme :

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

Deux points importants à noter :

  1. Si vous acceptez les commentaires d'un utilisateur, c'est très important pour nettoyer toutes les entrées utilisateur, sinon des utilisateurs malveillants pourraient modifier/supprimer/supprimer l'intégralité de votre base de données. Pour plus d'informations, recherchez "Injections SQL".
  2. J'utilise la classe StringBuilder, plutôt que d'utiliser une primitive de chaîne et d'ajouter simplement (c'est-à-dire. string s ="Insert..."; s+="blah blah blah") car c'est StringBuilder qui est plus rapide à ajouter, car il n'est pas traité comme un tableau et n'a donc pas besoin de se redimensionner lorsque vous y ajoutez.