如何使用外键执行MySQL批量插入,如果无效,则将其设置为NULL

如何使用外键执行MySQL批量插入,如果无效,则将其设置为NULL,mysql,mysql-5.6,Mysql,Mysql 5.6,我正在从服务的xml数据导入数十万行,其中外键指向screenings.venture\u id到ventions表 但是,我发现他们的一些数据丢失了场馆,因此批量插入失败 如果外键失败,是否有办法自动将筛选。场馆id设置为NULL?我真的希望保留数据内聚和级联更新/删除的外键,而不使用触发器 到目前为止,我最好的办法是在插入之前禁用外键检查。这将适用于初始导入,但这意味着每次保存筛选并具有无效外键时,它都将失败。对于后续插入,我将尝试这种方法 创建一个没有FK关系的独立平台表 在着陆台上创建一

我正在从服务的xml数据导入数十万行,其中外键指向
screenings.venture\u id
ventions

但是,我发现他们的一些数据丢失了
场馆
,因此批量插入失败

如果外键失败,是否有办法自动将
筛选。场馆id
设置为
NULL
?我真的希望保留数据内聚和级联更新/删除的外键,而不使用触发器


到目前为止,我最好的办法是在插入之前禁用外键检查。这将适用于初始导入,但这意味着每次保存筛选并具有无效外键时,它都将失败。

对于后续插入,我将尝试这种方法

  • 创建一个没有FK关系的独立平台表

  • 在着陆台上创建一个Before insert触发器,用于验证场馆主台上是否存在场馆ID。如果存在,则insert将继续;如果不存在,则可以跳过insert或在另一个日志表中插入这些坏行,以供将来参考


  • 希望这有帮助

    这是一个区分好与坏的好主意,我没有想到这一点。但是,对这些大容量插入中的每一行的触发器检查是否与在插入之前手动检查外键的有效性相同?如果对每一行使用触发器,则触发器将检查插入的每一行。这将类似于手动检查它们,只是它是由触发器完成的。这会使插入速度减慢一点(因为它必须交叉检查另一个表)。请确保其他表已编制索引。