Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

É possível fazer cópia em massa no mysql


Você pode inserir várias linhas usando uma única instrução SQL da seguinte forma:
INSERT INTO myTable (col1, col2, col3) VALUES ('myval1', 'myval2', 'myval3'), ('myotherval1', 'myotherval2', 'myotherval3'), ('anotherval1', 'anotherval2', 'anotherval3');

Atualização:

MarkR está certo em seu comentário - se você estiver coletando dados de um usuário ou compilando informações, poderá criar a consulta dinamicamente com 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();

Dois pontos importantes a serem observados:
  1. Se você estiver aceitando a entrada de um usuário, é muito importante para limpar todas as entradas do usuário, caso contrário, usuários mal-intencionados podem modificar/excluir/descartar todo o seu banco de dados. Para obter mais informações, pesquise "Injeções de SQL" no Google.
  2. Estou usando a classe StringBuilder, em vez de usar uma string primitiva e simplesmente anexar (ou seja, string s ="Insert..."; s+="blah blah blah") porque o StringBuilder é mais rápido em anexar, porque ele não é tratado como uma matriz e, portanto, não precisa ser redimensionado à medida que você anexa a ele.