C# MySqlBulkLoader对外键敏感吗?
我正在使用MySqlBulkLoader将文件批量插入到具有外键约束的表中C# MySqlBulkLoader对外键敏感吗?,c#,mysql,bulkinsert,C#,Mysql,Bulkinsert,我正在使用MySqlBulkLoader将文件批量插入到具有外键约束的表中 using (var conn = new MySqlConnection(connectionString)) { var bl = new MySqlBulkLoader(conn); bl.TableName = tableName; bl.Timeout = 600; bl.FieldTerminator = ","; bl.LineTerminator = "\r\n";
using (var conn = new MySqlConnection(connectionString))
{
var bl = new MySqlBulkLoader(conn);
bl.TableName = tableName;
bl.Timeout = 600;
bl.FieldTerminator = ",";
bl.LineTerminator = "\r\n";
bl.FileName = tempFilePath;
bl.NumberOfLinesToSkip = 1;
numberOfInsertedRows = bl.Load();
}
文件内容如下所示:
CampaignRunId,RecipientId,IsControlGroup
27,"testrecipient_0",False
27,"testrecipient_1",False
27,"testrecipient_2",False
27,"testrecipient_3",False
27,"testrecipient_4",False
27,"testrecipient_5",False
27,"testrecipient_6",False
27,"testrecipient_7",False
27,"testrecipient_8",False
27,"testrecipient_9",False
27,"testrecipient_10",False
27,"testrecipient_11",False
27,"testrecipient_12",False
27,"testrecipient_13",False
“活动运行Id”列是引用另一个表“活动运行Id”列的FK。ID27已经存在于该表中,当我在MySql工作台上直接使用单个INSERT查询时,INSERT成功。但从我的程序来看,这似乎不起作用,我得到了以下MySqlException:
无法添加或更新子行:外键约束失败
postbag.activityrecipient,约束
FK_活动收件人_活动运行外键活动运行ID
在更新级联时删除级联时引用活动运行Id
我是否应该在插入之前删除外键,并在插入之后重新添加?在运行加载之前,将外键设置为0。这将禁用FK强制,直到您退出该连接,或再次将该值设置为1。@MarcB但我正在从程序运行查询,这不是一次性任务。有没有办法以编程方式禁用外键检查并重新分配它?可能conn只是一个可以运行查询的常规mysql连接,所以conn->执行“set-foreign\u-key\u-checks=0”或其他任何命令。@MarcB有意义。但我想知道的是,当我们有外键时,MySqlBulkLoader真的不能工作吗?取决于你的意思,不能工作。如果查询会导致外键冲突,则不会工作。但在很多情况下,表结构具有自引用FK,这意味着即使mysql也无法加载自己的转储。e、 g.mysql_dump倾向于按字母顺序将表中的数据转储出来。如果表a的外键指向表B,则加载转储将失败,因为在处理表a时,表B尚未加载。因此,可以暂时禁用FK检查。