Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/69.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# MySqlBulkLoader对外键敏感吗?_C#_Mysql_Bulkinsert - Fatal编程技术网

C# 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";

我正在使用MySqlBulkLoader将文件批量插入到具有外键约束的表中

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检查。