Mysql:使用Select多次插入,外键失败

时间:2017-04-02 16:14:33

标签: mysql foreign-keys sql-insert bulkinsert

我尝试在表A中“复制”几行。这个表(A)只有两个外键字段。一个引用表B,另一个引用表C.

现在我想从A中取几行并将它们重新插入(复制)到A.这样做我正在更改其中一个外键(FK1)。

INSERT INTO `A` (`FK1`, `FK2`) VALUES (".$newFK.", 1);

此代码没有任何问题。但我需要复制不止一行。当然,我可以做一个SELECT-Statement并使用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。我试图从A作为Asource执行SELECT-Statement选择,但它也失败了。

知道它失败的原因吗?

1 个答案:

答案 0 :(得分:0)

尝试子查询:

"INSERT INTO A
(
    FK1,
    FK2
) 
SELECT
    FK1,
    FK2
FROM    
    (SELECT
        {$newFK} AS FK1,
        FK2
    FROM
        A
    WHERE
        FK1 = {$tobeduplicatedFK}) x0;"