当前位置: 首页 > 知识库问答 >
问题:

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

程俊力
2023-03-14

我试着在我的表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,所以出现了问题。我曾尝试执行SELECT语句从as资源中进行选择,但也失败了。

知道它为什么会失败吗?

共有1个答案

孟华晖
2023-03-14

尝试一个子查询:

"INSERT INTO A
(
    FK1,
    FK2
) 
SELECT
    FK1,
    FK2
FROM    
    (SELECT
        {$newFK} AS FK1,
        FK2
    FROM
        A
    WHERE
        FK1 = {$tobeduplicatedFK}) x0;"
 类似资料:
  • 问题内容: 如何使用php将多个数据插入mysql数据库。我尝试使用for循环,但没有运气。 问题答案: 只需在循环中构建查询,然后在循环竞争时执行查询即可 您还会注意到,我将您对数据库连接的包含移到了循环之外。无需重复拨打该电话。 另外,请确保您逃脱了要插入的那些值,或者使用参数化查询来进行插入,以防止SQL注入。

  • 我在MySQL中有下表。 表1(身份证、名字、姓氏、电话号码) 表2(TID、电子邮件) 我在 Table1 中有 25000 行,而我的 Table2 包含 20000 行。我在表 2 中的 TID 是引用表 1 的主键 ID 的外键。如果姓氏为 NULL,则 Table2 中将不存在这些 ID。现在,我正在尝试仅针对具有姓氏的表合并这两个表。 我重新定义了表2的模式,如下所示。 Table2(

  • 问题内容: 当我只为单个列插入数据时,我正在寻找一种进行多行插入的方法。 这是示例表: 我希望能够在每一行的名称列中插入类似(“ admin”,“ author”,“ mod”,“ user”,“ guest”)的内容。 MySQL文档显示多个插入应采用以下格式: 但是我的声明最终看起来像这样: 而且我得到以下信息: 错误1136(21S01):列计数与第1行的值计数不匹配 这意味着它认为我正在尝

  • 问题内容: 我的数据包含约30 000条记录。而且我需要将此数据插入到MySQL表中。我将这些数据按包进行分组(按1000分组),并创建多个插入,如下所示: 如何优化此插入的性能?每次可以插入1000条以上的记录吗?每行包含大小约为1KB的数据。谢谢。 问题答案: 您需要检查mysql服务器配置,尤其是检查缓冲区大小等。 您可以从表中删除索引(如果有的话),以使其更快。一旦数据输入,就创建索引。

  • 本文向大家介绍MySQL INSERT INTO SELECT导致从另一张表一次插入多行,包括了MySQL INSERT INTO SELECT导致从另一张表一次插入多行的使用技巧和注意事项,需要的朋友参考一下 让我们首先创建一个表- 使用插入命令在表中插入一些记录- 使用select语句显示表中的所有记录- 这将产生以下输出- 以下是创建第二个表的查询。 以下是执行INSERT INTO SEL

  • 问题内容: 我想使用Java一次将多行插入MySQL表中。行数是动态的。过去我在做… for (String element : array) { myStatement.setString(1, element[0]); myStatement.setString(2, element[1]); } 我想对此进行优化,以使用MySQL支持的语法: INSERT INTO table (col1,