MySQL:使用 Select 进行多重插入,外键失败

问题描述 投票:0回答:1

我尝试“复制”表 A 中的几行。该表 (A) 只有两个字段,它们是外键。一份参考表 B,另一份参考表 C。

现在我想从 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 子句中更改的 FK。我尝试执行从 A 作为 Asource 选择的 SELECT 语句,但它也失败了。

知道为什么失败吗?

mysql foreign-keys sql-insert bulkinsert
1个回答
0
投票

尝试子查询:

"INSERT INTO A
(
    FK1,
    FK2
) 
SELECT
    FK1,
    FK2
FROM    
    (SELECT
        {$newFK} AS FK1,
        FK2
    FROM
        A
    WHERE
        FK1 = {$tobeduplicatedFK}) x0;"
© www.soinside.com 2019 - 2024. All rights reserved.