插入到具有不存在值的值

vlf7wbxs  于 2021-06-15  发布在  Mysql
关注(0)|答案(1)|浏览(376)

这个问题在这里已经有答案了

mysql-忽略插入错误:重复条目(5个答案)
两年前关门了。
我有一个关于在表中插入数据的问题。我的表只是由一个主键组成(即由两个外键组成)。问题是:我不知道如何执行脚本来插入除不存在的值以外的所有行。因为在脚本中,有些插入不再可用。
出于某种原因,有人给了我insert脚本,但是外键被删除了。所以当我执行脚本时,我得到一个错误“constraint fail…”,这是正常的。但是如何方便地插入行以避免由于无效外键而导致的错误呢?

INSERT INTO `X_Y` (`x_id`, `y_id`) VALUES
(4, 1),
(4, 2),
(4, 3),
(4, 4),
(4, 5),
(5, 6),
(5, 7),
(5, 8),
(6, 9),
(6, 10),
(7, 11),
(8, 12),
(8, 13),
(11, 18),
(12, 19),
... ( about 2000 insert)
(1680, 2071);

例如:insert(4,1)无法执行,因为外键x\u id 4不再存在。

yeotifhr

yeotifhr1#

首先尝试将数据插入临时表中,不受任何约束:

INSERT INTO temp (x_id, y_id)
VALUES
    (4, 1),
    (4, 2),
    ...;

然后,使用以下查询插入到目标表中:

INSERT INTO X_Y (x_id, y_id)
SELECT x_id, y_id
FROM temp t
WHERE
    EXISTS (SELECT 1 FROM X x WHERE x.id = t.x_id) AND
    EXISTS (SELECT 1 FROM Y y WHERE y.id = t.y_id);

上面的insert检查每一行的 x_id 以及 y_id 实际上,值在两个父表中具有匹配的主键。

相关问题