我试着“复制”我的表A中的几行。这个表(A)只有两个字段是外键。一个引用表B,另一个引用表C.Mysql:多个插入选择,外键失败
现在我想从A中取几行并将它们重新插入(重复)到A中。这样做是为了更改其中一个外键( FK1)。
INSERT INTO `A` (`FK1`, `FK2`) VALUES (".$newFK.", 1);
此代码没有任何问题。但我需要复制不止一行。当然,我可以做一个SELECT语句,并使用fetch_array逐一插入每一行,但我想解决它更优雅。就像这样:
INSERT INTO A (`FK1`, `FK2`) SELECT ".$newFK.", `FK2` FROM `A` WHERE `FK1` = '".$tobeduplicatedFK."';
除了我曾尝试
INSERT INTO `A` SET `FK1` = ".$newFK.", `FK2` = (SELECT `FK2` FROM `A` WHERE `FK1` = '".$tobeduplicatedFK."');
遗憾的是没有这些工作。但我确实收到“无法添加或更新子行:外键约束失败” - 与FK1相关的错误。由于不雅的版本正在运行,新的FK1($ newFK)存在。我也检查了旧的FK1($ tobeduplicatedFK),它也存在。
我想可能会因为select语句在同一个表上,并使用必须在WHERE-Clause中更改的FK而混淆。我曾尝试从As源执行SELECT语句选择,但它也失败了。
任何想法为什么它失败?
运行查询一次,然后当它的错误,运行'SHOW ENGINE INNODB STATUS;'。滚动浏览结果输出并找到标题为'LATEST FOREIGN KEY ERROR'的部分。这会告诉你一个你尝试插入的父表中不存在的特定值。 –
如果你正在改变你正在投入的东西,你是如何“复制”的? (用引号括起来并不神奇地告诉我们你没有做出什么努力来解释。)PS请阅读[mcve]并采取行动。 *给你所有的代码,输入,期望的输出和输出,包括错误等。* – philipxy
为什么单引号? – philipxy