我必须在同一张表中复制超过100k条记录,并且在第一张表中的每一行插入后,第二张表将使用第一张表插入ID(主键)进行更新。我尝试进行批量插入,但是随后我无法获得将插入第二个表中的所有插入的ID。我正在使用MySQL 5.5。当我运行以下代码时,出现以下随机错误:
如何最佳地插入这些记录?
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的最快方法是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);
来自https://dev.mysql.com/doc/refman/5.7/en/load-data.html “ LOAD DATA INFILE语句以非常高的速度将文本文件中的行读取到表中……”
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句