如何在MySQL中批量插入记录

本文关键字:插入 记录 MySQL | 更新日期: 2023-09-27 17:54:21

我必须在同一个表中复制超过100k条记录,并且在第一个表中插入每一行之后,第二个表将使用第一个表插入ID(主键)更新。我试图做大容量插入,但我不会得到所有插入的id,这将被插入到第二个表。我使用MySQL 5.5。当我运行以下代码时,我得到了以下随机错误:

  1. 在查询过程中与MySQL服务器失去连接。
  2. 与当前连接关联的事务已经完成但尚未处理。交易必须先处理该连接可用于执行SQL语句。
  3. 网络数据包乱序:received[x], expected[y].

如何以最佳方式插入这些记录?

CODE;

foreach (var item in transactions)
{
    int transactionId;
    using (MySqlCommand cm = DM.ConnectionManager.Conn.CreateCommand())
    {
        cm.CommandType = System.Data.CommandType.Text;
        var commandText = @"INSERT INTO FirstTable SET 
                        column1=@column1;";
        cm.CommandText = commandText;
        cm.Parameters.AddWithValue("@column1", item.column1);
        cm.ExecuteNonQuery();
        transactionId = (int)cm.InsertId;
    }
    foreach (var item in item.TransactionDetails)
    {
        using (MySqlCommand cm = DM.ConnectionManager.Conn.CreateCommand())
        {
            cm.CommandType = System.Data.CommandType.Text;
            var commandText = @"INSERT INTO SecondTable SET 
                        column1=@column1,
                        column2=@column2;";
            cm.CommandText = commandText;
            cm.Parameters.AddWithValue("@column1", item.column1);
            cm.Parameters.AddWithValue("@column2", item.column2);
            cm.ExecuteNonQuery();
        }
    }
}

如何在MySQL中批量插入记录

导入MySQL最快的方法是INFILE,所以我建议制作一个CSV文件,然后将下面的语句作为SQL语句运行。请注意,我没有一个完整的c#设置和测试这个…但这是我如何备份/恢复MySQL,当我想要它做得快…因此,我假设可以在设置为"commandText"时运行以下命令,并在创建CSV文件并将其写入磁盘后运行。

LOAD DATA LOCAL INFILE 'import.csv' INTO TABLE MyTable FIELDS TERMINATED BY ','
  ENCLOSED BY '"'
  LINES TERMINATED BY ''n'
    (Col1,Col2,Col3);

From https://dev.mysql.com/doc/refman/5.7/en/load-data.html " LOAD DATA INFILE语句以非常高的速度将文本文件中的行读取到表中…"