我对在表中插入数据有疑问。 我的表只是由一个主键(由两个外键组成)组成。 问题是:我不知道如何执行我的脚本来插入除不存在的值以外的所有行。因为在脚本中,某些插入不再可用。
由于某种原因,有人给了我插入脚本,但带有一些要删除的外键。因此,当我执行脚本时,出现错误“约束失败...”,这很正常。 但是如何轻松地插入行以避免由于无效外键导致的错误?
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);
例如:因为外键x_id 4不再存在,所以无法执行insert(4,1)。
答案 0 :(得分:1)
尝试首先将数据无限制地插入临时表:
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);
上述插入操作针对每一行检查指定的x_id
和y_id
值实际上在两个父表中是否具有匹配的主键。