0

我正在尝试将数据从 CSV 文件导入数据库,但表 A 具有外键约束表 B。如果外键与主键匹配,我想要将数据插入 A 并更新 B 中的相关行B(并且没有其他问题);否则什么都不会发生。目前,我正在执行以下操作(稍微复杂一点的版本):

PRAGMA foreign_keys = ON;

for (row in b.csv){
    INSERT INTO b
    VALUES ("b_key", NULL, NULL);
}

for (row in a.csv){
    INSERT OR IGNORE INTO a 
    VALUES ("a_key", "b_key", ...);

    UPDATE OR IGNORE b 
    SET x = "X", y = "Y"
    WHERE key = "b_key";
}

这样做的结果是最终 a.csv 将包含“b_key”不在表 b 中的行,此时整个批量更新将失败,并出现异常“外键约束失败”。任何人都知道我可以让它工作的简单(甚至不简单)方法吗?

4

1 回答 1

0

1)在第二个循环中切换 the 的顺序INSERTUPDATE这样,“b”将在“a”需要它之前设置。

2)使用INSERT OR REPLACE而不是UPDATE“b”键。更多关于它如何工作以及为什么它擅长:SQLite - UPSERT *not* INSERT 或 REPLACE。基本上,在将任何内容放入“a”表之前,您将保证您拥有“b”中的键。

于 2013-11-27T15:48:46.147 回答